Jump to content

[TOPIC: topicViewTemplate]
[GLOBAL: userSmallPhoto]
Photo

[Need Help] Bad argument #-2 to 'insert' (Proxy expected, got nil)
Started by 15287 Apr 26 2019 05:52 PM

2 replies to this topic
[TOPIC CONTROLS]
[/TOPIC CONTROLS]
[modOptionsDropdown]
[/modOptionsDropdown]
[reputationFilter]
[TOPIC: post.html]
#1

15287

[GLOBAL: userInfoPane.html]
15287
  • Observer

  • 2 posts
  • Corona SDK

Hello. I'm pretty new to coding, and this is a project I'm doing for school where I have to incorporate the use of classes to an app. I've run into some trouble and I can't figure out how to resolve my issue. It would be great if someone was able to help me.

 

We got a pretty bad rundown on how classes work and how to use them, so I'm not even entirely sure if this is how I'm supposed to go about using it.

 

What I'm trying to do in this screen is to create a few text fields where the user puts in the answers to whatever question I come up with, and when they push a button to check their answers, will cause a Runtime event signal to be picked up by the class and see whether or not their answers are correct. It sounds super simple on paper, but I'm stuck trying to insert the Question class into the Question screen. I'm getting the error in the screen:initialize where I'm trying to call the class.

 

Usually, for objects such as an image, I simply create the image, type self:insert(image), local image = self.image, and i can make that image appear or disappear; however, I can't seem to 'self:insert' the class.

Could someone please lend some assistance.

 

QUESTION SCREEN

 

questionScreen = {}
	require ("Classes.30logglobal")
	local fullW = display.contentWidth
	local fullH = display.contentHeight

function questionScreen:new()
	local screen = display.newGroup()
	screen.stage = display.getCurrentStage()

	function screen:initialize()
                
		local Questions = require ("Classes.Questions")
		self:insert(Questions)
		self.Questions = Questions
		Questions:generator()

		local Title = display.newText
			{
			text     = ("Questions are Case Sensitive"),
			x        = fullW/2,
			y        = fullH/20;
			width    = 300;
			font     = native.systemFontBold;
			fontSize = 30;
			align = "center";
			alpha = 0
			}
		self:insert(Title)
		self.Title = Title

		--Buttons
			local checkButton = self:getButton("Temp.png")
			self:insert(checkButton)
			self.checkButton  = checkButton

        --These are the native fields whose answers are stored in the Questions class

	questionInput1 = native.newTextField( 900, 140, 270, 35 )
		self:insert(questionInput1)
		self.questionInput1 = questionInput1
	questionInput2 = native.newTextField( 900, 230, 270, 35 )
		self:insert(questionInput2)
		self.questionInput2 = questionInput2
	questionInput3 = native.newTextField( 900, 320, 270, 35 )
		self:insert(questionInput3)
		self.questionInput3 = questionInput3
	questionInput4 = native.newTextField( 900, 410, 270, 35 )
		self:insert(questionInput4)
		self.questionInput4 = questionInput4

	end



			function screen:getButton(image)
				local img = display.newImage(image)
				self:insert(img)
					function img:touch(event)
						screen:onButtonTouch(event)
					end

			img:addEventListener("touch", img)
			return img

			end

			function screen:onButtonTouch(touch)
				local target = touch.target
				local phase  = touch.phase

				if phase == "began" then
					if target 	  == self.startButton then
						print("Fly, you fools.")
						Runtime:dispatchEvent({name = "checkButtonTouched", target = screen})
					end
					return true
				end
			end


	function screen:show()
		local transitionInTime = 1000
		
		local Title = self.Title
		local questionInput1 = self.questionInput1
		local questionInput2 = self.questionInput2
		local questionInput3 = self.questionInput3
		local questionInput4 = self.questionInput4

		local checkButton    = self.checkButton
		checkButton.x    = display.contentWidth/4
		checkButton.y    = display.contentHeight - 150
		checkButton.xScale = .3
		checkButton.yScale = .3
		checkButton.alpha = 0
	

		questionInput1.x = fullW/2
		questionInput2.x = fullW/2
		questionInput3.x = fullW/2
		questionInput4.x = fullW/2
		
		Title.tween = transition.to(Title, {alpha = 1, transition.easingOutExpo, time = transitionTime, onComplete = function() 
			screen:cancelTween(Title) end})
		checkButton.tween = transition.to(Title, {alpha = 1, transition.easingOutExpo, time = transitionTime, onComplete = function() 
			screen:cancelTween(checkButton) end})
		questionInput1.tween = transition.to(questionInput1, {alpha = 1, transition.easingOutExpo, time = transitionTime, onComplete = function() 
			screen:cancelTween(questionInput1) end})
		questionInput2.tween = transition.to(questionInput2, {alpha = 1, transition.easingOutExpo, time = transitionTime, onComplete = function() 
			screen:cancelTween(questionInput2) end})
		questionInput3.tween = transition.to(questionInput3, {alpha = 1, transition.easingOutExpo, time = transitionTime, onComplete = function() 
			screen:cancelTween(questionInput3) end})
		questionInput4.tween = transition.to(questionInput4, {alpha = 1, transition.easingOutExpo, time = transitionTime, onComplete = function() 
			screen:cancelTween(questionInput4) end})
		
	end
	
		function screen:cancelTween(obj)
			if obj.tween ~= nil then
				transition.cancel(obj.tween)
				obj.tween = nil
			end
		end

	function screen:hide()
	
	
	end

	screen:initialize()
	screen:show()
	return screen
end
return questionScreen

QUESTION CLASS

local Questions = class()
Questions.__name = "Questions"

function Questions:__init()
end

function Questions:generator()
	Runtime:addEventListener("checkButtonTouched", function()
		if ( "ended" == event.phase ) then
			if questionScreen.questionInput1.text ~= "Yes" then
				local alert = native.showAlert( "You have incorrect answers" )
			elseif questionScreen.questionInput2.text ~= "Yes" then
				local alert = native.showAlert( "You have incorrect answers" )
			elseif questionScreen.questionInput3.text ~= "Yes" then
				local alert = native.showAlert( "You have incorrect answers" )
			elseif questionScreen.questionInput4.text ~= "Yes" then
				local alert = native.showAlert( "You have incorrect answers" )
			else local alert = native.showAlert( "Very nice" )
			end	
		end
	end)
end

return Questions


[TOPIC: post.html]
#2

XeduR @Spyric

[GLOBAL: userInfoPane.html]
XeduR @Spyric
  • Contributor

  • 683 posts
  • Corona SDK

I'm not really a fan of doing someone else's homework, but you'll have a better chance of getting help from others if you make it as easy as possible for them to help you.

This would be done by:
1) Clearly explaining what you are trying to accomplish, i.e. what you are doing, what you expected to happen and what actually happened.
2) Format your code properly (i.e. use the <> code button) and use proper indentation, etc. or upload the files themselves.
3) Point out where the error occurs, i.e. what row

As it is now, your code is hard to read and the only way to find out where the error actually is would be to comb through your code line by line. Help others help you.


  • 15287 likes this

[TOPIC: post.html]
#3

15287

[GLOBAL: userInfoPane.html]
15287
  • Observer

  • 2 posts
  • Corona SDK

Thanks for the reply xD Kinda new to this so I'll fix it up




[topic_controls]
[/topic_controls]