2010-05-21 6 views
1

나는 내 액션 스크립트 코드에서 이상한 것을보고있다.flex/actionscript 지정이 실패 했습니까?

나는 두 개의 클래스 foo와 bar, bar extends foo를 가지고있다. 모델 클래스에서 나는 foo 멤버 변수를 가지며, bar 객체를 foo 변수에 할당합니다. 그러나 할당 후에 foo 변수는 null입니다.

[Bindable] public var f:foo; 
public function someFunc(arr:ArrayCollection):void { 
    if(arr.length > 0) { 
    var tempBar:bar = arr.getItemAt(0) as bar; 
    if(tempBar != null) { 
     tempBar.someProp++; 
     f = tempBar; 
     // f is now null 
    } 
    } 
} 

내가 잘못하고있는 것에 대한 아이디어가 있습니까?

selectedCustomerJob : 널 (null)

jobToSelect 유형 : com.intuit.sb.cdm.v2

[Bindable] public var selectedCustomerJob:IDSCustomer; 

    public function selectedJobByIdCallback(evt:Event):void 
    { 
    var temp:IDSDTOArrayCollection = evt.currentTarget as IDSDTOArrayCollection; 
    if(null != temp && temp.length > 0) 
    { 
    selectedCustomerJob = IDSJob(temp.getItemAt(0));; 
    trace(" selectedCustomerJob: " + flash.utils.getQualifiedClassName(selectedCustomerJob)); 
    trace("  jobToSelect type: " + flash.utils.getQualifiedClassName(temp.getItemAt(0))); 
    trace("jobToSelect super class: " + flash.utils.getQualifiedSuperclassName(temp.getItemAt(0))); 
    } 
    } 

이 추적 출력은 다음과 같습니다 여기에 편집

정확한 코드 :: IDSJob

jobToSelect 슈퍼 클래스 : com.intuit.sb.cdm.v2 :: IDSCustomer

답변

0

as 키워드를 사용한 주조가 실패하면 null을 반환합니다. 이 경우 배열 컬렉션의 첫 번째 항목은 예상대로 Bar 유형의 객체가 아닐 수 있습니다. Foo 또는 다른 것일 수 있습니다. 하위 클래스 객체를 기본 클래스로 캐스팅 할 수 있지만 다른 방법은 사용할 수 없습니다.

캐스팅에 괄호 구문을 사용하십시오. 캐스팅에 실패하면 예외가 발생하므로 arr.getItemAt(0) 유형을 알아낼 수 있습니다.

//Change 
var tempBar:Bar = arr.getItemAt(0) as Bar; 

//to 
var tempBar:Bar = Bar(arr.getItemAt(0)); 

는 배열 컬렉션의 첫 번째 항목이 Bar 예 (그리고 Foo 또는 뭔가 다른)가 실제로 있는지 확인합니다.

그렇지 않으면 당신은 그런데

trace(flash.utils.getQualifiedClassName(arr.getItemAt(0))); 

if(tempBar != null) { 
    tempBar.someProp++; 
    f = tempBar; 
    // f is now null 
} 

를 사용하여 유형을 찾을 수 있습니다, 내가 게시 된 코드는 당신이되고 있기 때문에 f에 출마 정확한 코드가 아닌 믿고 null, tempBar는해야한다 null으로 지정하면 f에 지정됩니다. 이 경우 if 안에있는 null을 확인하면 코드가 if 안에 실행되어서는 안됩니다. if 블록에 들어가더라도 증가시키려는 첫 번째 줄에 널 포인터 오류 (# 1009)가 표시됩니다. tempBar.someProp

관련 문제