2011-03-16 7 views
0

ActionScript 고정 초기화 프로그램에서 두 개의 정적 ArrayList 객체를 초기화하려고합니다. 정적 초기화 프로그램에서 "정의되지 않은 속성에 액세스"오류가 발생했습니다.

는이 코드 작성 :

import mx.collections.ArrayList; 

public class Problem{ 

    [Bindable] private static var levelNumbers:ArrayList; 
    [Bindable] private static var speedNumbers:ArrayList; 

    { 
     for (var loopInt:int = 1; loopInt<901; loopInt++){ 
      levelNumbers.addItem(loopInt); 
      speedNumbers.addItem(loopInt); 
     } 
    } 

    //... 
} 

을하지만 코드는 컴파일되지 않습니다. 나는 for 루프의 세 줄이 오류가 발생합니다 :

1120 : Access of undefined property loopInt

왜이다? 방금 변수를 정의했습니다!

+0

을 작동합니다. 함수는 어디에 선언 되었습니까? – JeremyFromEarth

+0

@jerem'getTimer()'를 의미합니까? 'flash.utils'에서 발견되는 내장 함수입니다. 나는 그것을 명확하게하기 위해 그것을 제거합니다. – Dunaril

+0

나를 죽이기 시작한 getTimer() 호출이 아니 었습니다. for 루프를 감싸는 함수가 선언이 없다는 사실이었습니다. – JeremyFromEarth

답변

4

문제는 실제로 코드에서 로컬 loopInt 변수입니다. 정적 인시 나이저를 사용하는 경우 this, 클래스 이름 또는 로컬 변수를 사용할 수 없습니다. 처음 두 가지는 아마도 클래스가 아직 완전히 존재하지 않기 때문일 것입니다. 마지막 하나는 확실하지 않습니다 (아마도 범위가 없습니다).

작동 시키려면 루프를 함수로 추출하십시오. 이처럼 :

{ 
    _init(); 
} 

private static function _init():void 
{ 
    for (var loopInt:int = 1; loopInt<901; loopInt++){ 
     levelNumbers.addItem(loopInt); 
     speedNumbers.addItem(loopInt); 
    } 
} 

그리고이 예에서 누락 된 일부 코드가있는 것 같다

+0

난 그냥 테스트하고 잘 작동합니다. 나는 또한 _init()에 대한 호출을 감싸는 중괄호가 필요 없다는 것을 발견했다. – JeremyFromEarth

+1

정적 이니셜 라이저에는 일반적인 범위가 있습니다. ActionScript로 로컬 변수를 선언 할 수 없습니다. 또한 중괄호를 추가하면 범위에 아무런 영향을 미치지 않으므로 'var loopInt'는 인스턴스 속성으로 간주됩니다. –

+0

고마워요! 그게 효과가 있었어. – Dunaril

-1

Flex에 ArrayList가 없기 때문에 Thats가 발생합니다. ArrayCollection을 의미합니다.이 코드는 제대로 작동합니다.

공용 클래스 문제점 {
[바인딩] 개인 정적 var에 levelNumbers : ArrayCollection에;
[Bindable] 전용 정적 var speedNumbers : ArrayCollection;
{trace ("1"+ getTimer());
(var loopInt : int = 1; loopInt < 901; loopInt ++) {
levelNumbers.addItem (loopInt);
speedNumbers.addItem (loopInt); }
trace ("2"+ getTimer() + "\ n \ n"); } // ...}

+0

Flex에는'mx.collections'에'ArrayList'가 있습니다. 가져 오기를 추가했습니다. – Dunaril

관련 문제