Reputation: 2735
I am currently writing a cross platform app using the CoronaSDK and Lua. I am using the director package to change scenes. However I am getting the following error:
"Director ERROR: Failed to execute new(params) function on 'startUp'."
I know the error is coming from my main class. Which is:
-----------------------------------------------------------------------------------------
--
-- main.lua
--
-----------------------------------------------------------------------------------------
local director = require("director")
local mainGroup = display.newGroup()
splash = display.newImage("images/logo.png")
local main = function()
splash:removeSelf()
splash = nil
mainGroup:insert(director.directorView)
local widget = require "widget"
-- show default status bar (iOS)
display.setStatusBar(display.DefaultStatusBar)
local mainGroup = display.newGroup()
-- event listeners for tab buttons:
local function onFirstView( event )
director:changeScene("startUp")
end
local function onSecondView( event )
director:changeScene("home")
end
-- table to setup buttons
local tabButtons = {
{ label="Home", up="icon1.png", down="icon1-down.png", width = 32, height = 32, onPress=onFirstView, selected=true },
{ label="Cards", up="icon2.png", down="icon2-down.png", width = 32, height = 32, onPress=onSecondView },
}
-- create the actual tabBar widget
local tabBar = widget.newTabBar{
top = display.contentHeight,
buttons = tabButtons
}
--I think it is this line which is causing the error
director:changeScene("startUp")
return true
end
timer.performWithDelay(3000, main, 1)
Here is my startUp.lua file:
module(..., package.seeall)
function new()
require "sqlite3"
local director = require("director")
--Connect to database or create it.
--Each user gets there own database****
local path = system.pathForFile("data.db", system.DocumentsDirectory)
local db = sqlite3.open(path)
--Create the database table if it does not already exist
local tablesetup = [[CREATE TABLE IF NOT EXISTS User (id Integer autoincrement PRIMARY KEY, firstname, lastname);]]
db:exec(tablesetup)
for row in db:nrows("SELECT * FROM User") do
--goto home if the user is in the database.
director.changeScene("home")
end
--If not in the database go to forms
director.changeScene("forms")
--Catch application Exit
Runtime:addEventListener("system", onSystemEvent)
--Handle application exit - close the database connection
local function onSystemEvent(event)
if(event.type == "applicationExit") then
db:close()
end
print("database closed")
end
end
Here is the error I get in the console:
Runtime Error director.lua:1092:attempt to call method 'insert' (a nil value)
stack traceback: in function 'insert' in function 'changeScene'
---------------
Director Error: Failed to execute new(params) function on 'startUp'.
---------------
assertion failed
---------------
Upvotes: 0
Views: 1755
Reputation: 3633
The error is a director class error. It occurs because your startUp.lua has some errors.
Are you using the latest director class(1.4)? The latest director class shows the ACTUAL ERROR as well.
And not that files are case-sensitive. Your file must be startUp.lua and not startup.lua.
EDIT:
I can think of 2 things.
1.Try changing director.changeScene to director:changeScene in 2 places in startUp.lua
2.Try removing the second local mainGroup = display.newGroup() in main.lua (though I doubt this would be the prob)
THE ACTUAL ERROR
-----------------------
Director ERROR: Failed to execute new( params ) function on 'wifiscreen'.
-----------------------
e:\corona\satheesh\doodle2\wifiscreen.lua:231: attempt to index global 'x' (a nil value)
-----------------------
The second line is the avtual error.
ERROR FOUND I THINK
I think the error is because you don't have a onSystemEvent function. Generally assertion failed error occurs if you try to add listeners to non-existing functions!
Upvotes: 1