Flex/AIR/AS3/Error Code2009.10.03 15:19
[TypeError] TypeError : Error #1034 유형 강제 변환에 실패했습니다. ⓖ을(를) ⓖ(으)로 변환할 수 없습니다.

캐스팅 실패 (ex:DisplayObject(), as DisplayObject)

클래스 상속관계 일때 캐스팅이 가능, 전혀다른 타입의 변수를 캐스팅하고 있다면 수정한다
저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★
Flex/AIR/AS3/Error Code2009.10.03 15:18
[TypeError] TypeError : Error #1088 루트 요소 다음에 나오는 문서 내의 태그는 올바른 형식이어야 합니다.

xml 형식이 올바르지 않음

xml 문서 전체 검토(상단에 오류가능성)

(EUC-KR일때 플래시가 4000자 이상 못받기때문에 Stream방식으로 데이터를 받거나, UTF-8로 변경해주어야한다.)
저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★
Flex/AIR/AS3/Error Code2009.10.03 15:17
[TypeError] TypeError : Error #1085 요소 유형 ⓖ은(는) 일치하는 끝 태그 (으)로 끝나야 합니다.

xml의 시작태그와 마감태그 불일치

xml 검사(작은따옴표, 따옴표, [], <>등이 문제일수 있음

(EUC-KR일때 플래시가 4000자 이상 못받기때문에 Stream방식으로 데이터를 받거나, UTF-8로 변경해주어야한다.)
저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★
Flex/AIR/AS3/Error Code2009.10.03 15:14
[TypeError] TypeError : Error #1095 XML 파서 실패: 속성이 종결되지 않았습니다.

XML(String)에서 String이 완벽한 XML문장이 아님

XML이 EUC-KR일때 자주 발생 = UTF-8로 고치거나 데이터를 Stream 방식으로 받아야한다

(EUC-KR일때 플래시가 4000자 이상 못받기때문에 Stream방식으로 데이터를 받거나, UTF-8로 변경해주어야한다)
저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★
Flex/AIR/AS3/Error Code2009.10.03 15:08
[TypeError] TypeError : Error #1010  정의되지 않은 용어이며 속성이 없습니다.

선언되지 않은 변수, Object 접근

오타여부 의심, 인스턴스 지정여부, 객체단계확인

해당 에러는 정의되지 않은 대상을 참조하거나 사용할때 나타나는 에러입니다.

보통 변수명의 오타로 인하여 발생할 경우가 많으니 변수명에 오타가 있는지 확인하시거나

정의하지 않은 변수나 객체를 사용하는 부분이 있는지 살펴보시면 됩니다.
저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★
Flex/AIR/AS3/Error Code2009.08.31 17:08
warning: unable to bind to property 'isCheck' on class 'Object' (class is not an IEventDispatcher)
위 경고 메세지가 뜰 경우 대처 방법

Bind 된 데이타의 타입이 정확하지 않을 경우 Object 객체에 담아서 대입한다.

[출처] Tong - BlueSky_09님의 Flex/Flash/AIR/As통 http://tong.nate.com/lhs0806/40051251

혹시나 봤을지 모르겠지만, FLEX 실행시에 Debugger 를 걸던지 , flashlog.txt 파일에 떨어지는 저런 경고문구들을
본적이 있을것이다. 없으면...ㅠ_ㅠ 쥐쥐~~~ 
가장 대표적인 예로 저렇게 경고를 뜨게하려면 간단하다. 

===============================================================================
1. ActionScript 부분
=============================================================================== 

private function ResultHandler(event:ResultEvent):void{
    // 조회된 정보를 가져온후 DATA 를 핸들링한다.   
    orginalLists = new ArrayCollection();
    orginalLists = ArrayCollection(event.result);
   
    madeLists = new ArrayCollection();
   
    for(var i:uint = 0; i < orginalLists.length ; i++){
    madeLists.addItem({
      value1:  orginalLists.getItemAt(i).value1,   
      value2:  orginalLists.getItemAt(i).value2,
      value3:  orginalLists.getItemAt(i).value3,
      value4:  orginalLists.getItemAt(i).value4,
      value5:  orginalLists.getItemAt(i).value5,
      isCheck : new Boolean(false)   
    });
    }
  } 

===============================================================================
2. MXML 부분
===============================================================================

<mx:DataGridColumn headerText="FactoryName" dataField="value5">
  <mx:itemRenderer>
    <mx:Component>
      <mx:HBox width="100%" height="100%" backgroundAlpha="0" horizontalScrollPolicy="off" verticalScrollPolicy="off">
      <mx:Script>
      <![CDATA[
     
      import mes.common.utils.ComponentUtils;     
      import mx.controls.ComboBox;
      import mx.events.CloseEvent;
      import mx.controls.Alert;

                         
      public function setComboIndex():void{         
        if(data != null){         
            combo1.selectedIndex = ComponentUtils.getComboIndex(combo1 , String(data.value5));
        }
      }     
      ]]>
      </mx:Script>
      <common:PlantComboBoxRenderer id= "combo1"  change="{data.value5 = combo1.selectedItem.data}">               
      </common:PlantComboBoxRenderer>
      </mx:HBox>
    </mx:Component>
    </mx:itemRenderer>
  </mx:DataGridColumn> 

============================================================================================= 

=> 스크립트 소스부분을 보면 RemoteObject 의 결과 이벤트로서 호출되는 함수란것을 알수있다(?) 
    머 중요한건 아니고, 암튼 잘 보면 result 의 사이즈 만큼 for 문을 돌면서, 새로운 배열에 
    Dynamic 하게 객체를 생성해서 새로운 ArrayCollection 을 만들고 있다. 아래처럼.... 

    for(var i:uint = 0; i < orginalLists.length ; i++){
    madeLists.addItem({
      value1:  orginalLists.getItemAt(i).value1,   
      value2:  orginalLists.getItemAt(i).value2,
      value3:  orginalLists.getItemAt(i).value3,
      value4:  orginalLists.getItemAt(i).value4,
      value5:  orginalLists.getItemAt(i).value5,
      isCheck : new Boolean(false)   
    }); 

    그리고, madeLists 녀석은 [Bindable] 메타 테그로 선언되어져서 MXML 부분에 DataGrid 의 dataProvider 로 
    바인딩 되어있다.(소스의 전체를 긁어다 놓은것이 아니므로 말로써 이해하기 바람~~) 
    다음으로, MXML 부분을 보면, DataGrid 안에 한 칼럼에 ComboBox 를 넣기 위해 itemRenderer 를 사용하여 , 
    inLine 스크립트를 구현하였다. 

    실제 저 소스가 돌아가는 원리를 순서로 표현하면, 

    1. 인라인으로 구현된 ComboBox  가 초기화 되면서, DB 접속을 한다. 
    2. 받아온 결과로 ComboBox 의 dataProvider 에 데이터를 바인딩한다. 
    3. CallBack 함수로 구현된 부모클래스의 setComboIndex() 를 호출한다. 
        - ComboBox 에서 호출하는 상세부분은 위 소스에는 없다. 
    4. ActionScript 부분에서 DataGrid 에 바인딩 해준 값을 가져다가 ComboBox 에 존재하는지 검사한다. 
    5. ComboBox 에 해당 데이터가 있으면 ComboBox 의 selectedIndex 를 선택되어있게 한다. 

-> 즉, DataGrid 안에 ComboBox 를 넣고, 그 초기값을 셋팅하기 위한 삽질이다. (물론 더 좋은 방법도 많으리라 생각한다.) 
그런데, 문제는 저렇게 바인딩 하고 실행하면 아마 위 제목에 뿌려진 경고가 좍좍좍 뿌려질것이다.
이유인즉..(검색과 삽질....)
우리가

 for(var i:uint = 0; i < orginalLists.length ; i++){
    madeLists.addItem({
      value1:  orginalLists.getItemAt(i).value1,   
      value2:  orginalLists.getItemAt(i).value2,
      value3:  orginalLists.getItemAt(i).value3,
      value4:  orginalLists.getItemAt(i).value4,
      value5:  orginalLists.getItemAt(i).value5,
      isCheck : new Boolean(false)   
    }); 

이렇게 집어넣은것이 문제인것이다. DataGrid 에서 바인딩을 해야 하는데, 실제 Object 의 성향을 알지 못한다는것이다.
머 깊게 들어가봐야 머리만 복잡하고, FLEX 접고 싶어질 뿐이라 해결책만 간단하게 설명하자면.......
윗 부분을

for(var i:uint = 0; i < orginalLists.length ; i++){ 
      var objectProxy:ObjectProxy = new ObjectProxy();
      objectProxy.value1 = orginalLists.getItemAt(i).value1;
      objectProxy.value2 = orginalLists.getItemAt(i).value2;
      objectProxy.value3 = orginalLists.getItemAt(i).value3;
      objectProxy.value4 = orginalLists.getItemAt(i).value4;
      objectProxy.value5 = orginalLists.getItemAt(i).value5;
      objectProxy.isCheck = "N"; 

      madeLists.addItem(objectProxy);


이런식으로 바꾸면 만사 OK 라는 것이다. 즉, 바인딩 되는 Object 대해서는 저렇게 선언이 되어져야만
ObjectProxy 라는 녀석이 그 객체를 Tracking 하면서 속성값의 변경이라던가를 감시하는것 같다.
사실 저렇게 안해도 아무 문제는 없다.(구현상)
그런데 깔끔해진 로그 파일을 보면 감탄하리라 생각된다. 앞으로도 저렇게 쓰는 습관을 들이는것이 좋을듯 하다. 

두서가 쓸데없이 길었지만 예제를 보다 적나라하게 설명하고자 나름 길게 삽질 했으니 이해바란다.~
모두 수고~
저작자 표시 비영리 변경 금지
신고
Posted by 코멧'★

티스토리 툴바