2012-12-02 3 views
1

AIR 3.2 SDK에서 작동하던 Flash/Air 응용 프로그램의 버튼을 누르면 오류가 발생합니다. 이제 AIR로 업그레이드되었습니다 3.5 SDK. 어떤 도움을 많이 주셨습니다.AIR 3.2에서 작동하는 응용 프로그램이 AIR 3.5에서 작동하지 않습니다.

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
    at seed_template_fla::MainTimeline/frame7()[seed_template_fla.MainTimeline::frame7:31] 
    at flash.display::MovieClip/gotoAndPlay() 
    at seed_template_fla::MainTimeline/gotoPage() [seed_template_fla.MainTimeline::frame1:20] 
    at seed_template_fla::MainTimeline/gotoRepro() [seed_template_fla.MainTimeline::frame1:12] 

Mac 용 Flash CS6을 사용하고 Air 3.5 SDK를 사용하여 내보내는 iPhone 용 응용 프로그램을 만들고 있습니다. 또한 AIR 3.5 런타임이 설치되어 있습니다.

앱은 현재 매우 간단합니다. gotoAndPlay (frameNr) 함수를 사용하여 버튼을 누르면 기본적으로 프레임간에 이동합니다. 클릭하면 숫자 배열을 업데이트하는 프레임에 몇 가지 헥스가 있습니다. 또한 눈에 보이거나 보이지 않게 토글됩니다.

이것은 AIR 3.2 SDK를 사용하여 완벽하게 작동하지만 최근 Adobe에서 AIR 3.5 SDK를 다운로드하여 플래시 (도움말> Air SDK 관리)를 추가하고 파일> 제작 설정> 목표.

다시 AIR 3.2 SDK로 전환하면 응용 프로그램이 완전히 다시 작동합니다.

또한 AIR 3.5 SDK를 사용하는 IOS 5.1을 실행하는 iPhone 4S에 앱을 업로드하면로드하는 점이 5 개있는 검은 색 화면이 나타납니다. 이것은 AIR 3.2 SDK에서도 잘 작동합니다.

프레임 (7) 코드입니다 마지막 줄은

stop(); 
techtitle.text = "Select Trait"; 
techdesc.text = "Spend points to change core stats and other special abilities"; 
points.visible = false; 
techpoints.visible=false; 
pointsbalance.text = myPoints.toString(); 
btn_tech.visible = false; 
curTechSelected = null; 

trace("set hexes invisible"); 
for (var j:int = 0; j <= 67; j++) { 
    if (hexStatusb[j] == 1) { 
     this["btn_hex_"+j+"b"].visible = false; 
    } 
} 

function onBtnHex37bClick(event:MouseEvent):void 
{ 
    techtitle.text = "tech1"; 
    techdesc.text = "tech1 description" 
    techpoints.text = "-2"; 
points.visible = true; 
techpoints.visible=true; 
btn_tech.visible = true; 
curTechSelected = btn_hex_37b; 
curTechSelectedNr = 37; 
curTechPoints = 2; 
} 

trace(this["btn_hex_37b"]); 
btn_hex_37b.addEventListener(MouseEvent.CLICK, onBtnHex37bClick); 

답변

1

OK - 그럼, 많은 것을 시도한 후에, 나는 이것이 왜 일어나고 있는지 알아 냈습니다.

솔루션 : AIR 3.5 SDK를 실행할 때 모든 TFL의 텍스트 개체를 제거

TFL 텍스트 라이브러리가 런타임에 제대로로드되지 않은 것 같다 얻을. 내가 언급하지 않은 것 중 중요한 것은 내가이 경고 메시지를 받고 있다는 것입니다 (여기에 유사 http://forums.adobe.com/thread/825637) 콘텐츠가 스트리밍되지 않습니다 ... 미리로드되는 런타임 공유 라이브러리는 textLayout_1.0.0.05 ...입니다.TFLText

출력

경고이 경고 메시지 : 무시는 http://fpdownload.adobe.com/pub/swz/crossdomain.xml에서 정책 파일의 속성을 '고정'. 'secure'속성은 HTTPS 및 소켓 정책 파일에서만 허용됩니다.

모든 TFLText 개체를 제거하고 클래식 텍스트로 변경하면 앱이 다시 정상적으로 작동합니다.

+0

비록 버튼이 어떤 TFLText도 포함하지 않았기 때문에 여전히 버튼이 null을 반환하는 이유를 설명하지는 않았지만 위와 같이 말한 적이 있습니다 ... 어떤 아이디어입니까? – user1871200

+0

이게 나를 도와 줬어! 나는 이것에 일을 소요 할 수 있었다. 고맙습니다!! –

0

가 시작하는 라인 31입니다 : 오류 메시지는 프로그램이 알고하지 않습니다, 그것은 의미 .. 뭔가가 null한다고 , 그것을 찾을 곳. 객체를 만들지 않았을 때 발생할 수 있습니다 (btn_hex_37b = new MovieClip()). 또는 변수를 만들지도 않았습니다.

(btn_hex_37b.addEventListener (MouseEvent.CLICK, onBtnHex37bClick);) onbtnHex37bClick이 존재하기 때문에 btn_hex_37b 만 null 일 수 있으며, 그렇지 않은 경우 프로그램이 컴파일되지 않습니다.

AIR 3.5로 전환 할 때 나타나는 이유는 아마 다른 순서로 생성 함수를 호출하기 때문입니다. btn_hex_37b 변수를 정의하는 행으로 이동하십시오. 호출하는 함수를 검색하십시오. btn_hex_37b가 frame7로 이동하기 전에 만들어 졌는지 확인하십시오.

또한, 그것의 중요한하지, onBtn_hex_37bClick을 가지고, 당신은 다음을 수행 할 수있는 경우 :

if(btn_hex_37b){ 
    btn_hex_37b.addEventListener(MouseEvent.CLICK, onBtnHex37bClick); 
} 

btn_hex_37b null가 아닌 경우 확인됩니다. else 메서드에서 시간 초과 된 메서드를 제공 할 수 있지만 (추악한 경우) 또는 개체 생성 직후에 eventlistener를 제공 할 수 있습니다.

희망이 도움이되었습니다.

+0

감사합니다. 귀하의 회신에서 강조한 사항을 살펴 보았습니다. 한 가지 분명한 점은 btn_hex_37b는 코드에서 결코 정의되지 않는다는 것입니다. 프레임 7의 버튼 중 하나의 인스턴스 이름입니다. 프레임과 요소가 먼저 구성되고 인스턴스 이름 할당이 뒤따라야한다고 항상 가정합니다. 관련된 액션 스크립트가 호출 될 것입니다. 따라서 이미 버튼의 WYSIWYG 속성 편집기에서이를 수행 했으므로 선언하지 않고 코드 내에서 'btn_hex_37b'인스턴스를 참조 할 수 있어야합니다. – user1871200

+0

그러면 settimeout (100, addListenertohex37)을 사용하고 addListener37 함수를 강조 표시된 코드로 정의해야합니다. 못생긴하지만 프레임에 코드를 추가하는 것과 같습니다. 그것은 작동하게 만들 것입니다 .. – csomakk

1

@csomakk 그레이트 뉴스. 나는 그 해답을 발견했다. 3.5 및 3.6으로 게시하고 TLF 텍스트도 가질 수 있습니다. 나는 정확하게 how to do it를 보여주는 나의 blog에 write-up를 게시했다.

플래시 CS6를 들어
관련 문제