2010-04-10 4 views
2

AS 3.0에서 참조 시스템을 푸는 것이 어렵다는 것을 알고 있습니다.AS 3.0 참조 문제

이 내가 가지고있는 코드는

package rpflash.ui { 

import flash.display.Sprite; 
import flash.display.MovieClip; 
import flash.display.Stage; 
import nowplaying; 
import flash.text.TextField; 

public class RPUserInterface extends Sprite{ 

    var np:nowplaying; 

    public function RPUserInterface(){ 
     } 

    public function init(){ 
     var np:nowplaying = new nowplaying(); 
     this.addChild(np) 
     } 

    public function updateplayer(xml:XML){ 
     var artist: String = xml.nowplaying.artist.toString(); 
     var title: String = xml.nowplaying.title.toString(); 
     trace("UI:update"); 
     trace(this.np);// this gives me a null reference 
     } 
} 
} 

(내가 문제를 찾기 위해하지만 아무 소용이 아래로 손질했다)하고 여전히 내가 순이익에 액세스 할 수 없습니다! trace this.np는 나에게 null 참조를 제공합니다. 나는 subling 클래스에서 액세스하려고도하지 않습니다. (btw 난 def 또한 어떻게 해야할지 알고 싶습니다.)

답변

3

init() 함수에서 np이라는 로컬 변수를 인스턴스화합니다. 대신이 시도 :

또한
public function init() { 
    // var np:nowplaying = new nowplaying(); 
    np = new nowplaying(); 
    this.addChild(np); 
} 

, init()updateplayer() 전에 호출지고 있는지 확인하십시오. 희망이 도움이됩니다.

+1

더 확장하려면 "var"키워드는 항상 현재 범위에 새 변수를 만듭니다. 게시 한 코드에서 변수를 두 번 선언하려면 "var"를 사용했습니다. 처음에는 클래스 속성을 선언하는 올바른 방법 인 함수 밖에서 선언합니다. 두 번째로, 함수 안에서 다시 선언 할 때, 그 함수 안에서 범위가 정해지는 새로운 변수를 만들고 있습니다. 나중에 초기화되지 않은 클래스 속성을 참조하기 때문에 나중에 변수를 참조하려는 시도가 작동하지 않습니다. – fenomas