2017-05-23 2 views
0

로드중인 이미지 객체에 터치 이벤트 리스너를 추가하려고합니다. https://docs.coronalabs.com/api/type/EventDispatcher/addEventListener.html이벤트 리스너를 사용하려고 할 때 인덱스 오류가 발생합니다.

그것은 다음과 같은 오류 반환 :

36 : 인덱스 지역 '객체'에 대한 시도 (nil의 값)

local t = {} 
local img = {} 
local i = 1 

local function showImages() 
    local function networkListenerImg(event) 
     if (event.isError) then 
      print ("Network error - download failed") 
     else 
      event.target.alpha = 0 
      transition.to(event.target, { alpha = 1.0 }) 
     end 
    end 

    for k,v in pairs(t) do 
     img[#img + 1] = v 
    end 

    local object = display.loadRemoteImage(event.params.chapter .. img[i], "GET", networkListenerImg, img[i], system.TemporaryDirectory, 50, 50) 

    function object:touch(event) 
     if event.phase == "began" then 
      print("You touched the object!") 
      return true 
     end 
    end 

    object:addEventListener("touch", object) 

end 

을이 실질적으로 문서의 정확한 복사 및 붙여 넣기이지만 테이블 t는 코드의 다른 위치에 채워지고 올바르게 채워집니다.

+0

'object'가'nil'이 아닌지 확인하십시오. 또한 귀하의 코드에서'event.params.chapter' 선언을 볼 수 없습니다. – ldurniat

+0

Event.params.chapter는 이전 장면에서 전달 된 값입니다. –

답변

2

해당 줄 중 36 줄 (거기에 28 줄 밖에 없음)은 언급하지 않았지만 오류가 계속 표시됩니다. 문제는 object이 항상 nil 일 것입니다. display.loadRemoteImage()은 아무 것도 반환하지 않습니다 (this 참조).

콜백이 수행되기 전에 청취자 콜백 캡처 object을 선언해야합니다. 그런 다음 콜백은 object의 값을 다운로드 결과로 설정해야합니다. 마찬가지로 ...

local t = {} 
local img = {} 
local i = 1 

local function showImages() 

    local object 
    local function networkListenerImg(event) 
     if (event.isError) then 
      print ("Network error - download failed") 
     else 
      event.target.alpha = 0 
      transition.to(event.target, { alpha = 1.0 }) 
      -- fill in code to save the download object into "object" 
     end 
    end 

    for k,v in pairs(t) do 
     img[#img + 1] = v 
    end 

    display.loadRemoteImage(event.params.chapter .. img[i], "GET", networkListenerImg, img[i], system.TemporaryDirectory, 50, 50) 

    function object:touch(event) 
     if event.phase == "began" then 
      print("You touched the object!") 
      return true 
     end 
    end 

    object:addEventListener("touch", object) 

end 
+0

감사! 이것은 정확히 문제였습니다. –

관련 문제