2012-08-16 2 views
0
내 프로그램에서 매우 이상한 행동을 데

, 많은 일을 시도하고 가능한 대답을하지만 성공하지 여기에 검색 한 후, 나는 새로운 질문 여기에 요청할 것입니다 결정 . 그래서 여기 내 문제 : 나는 대한 describeType을 사용하고이상한 행동은 4.6

() 나의 클래스를 설명하는 E4X XML 객체를 얻었다.

[Table] 
class MyClass extends ORM 
{ 
    [...] 

디버깅 XML 객체가 올바른 :

trace([email protected][0]); 
// output "Table" 
trace(xmlDescription.metadata.(@name == "Table").length()); 
// output... 0!!!! 

이 또한 내가 원하는 노드 정확한 구조를 가지고 XML 객체를 확인 : 내 클래스는 인수없이 메타 데이터 [표]를 가지고

<metadata name="Table"/> 

내 연구를하면서 나는 XML.ignoreWhitespace 속성에 대해 기억했다. 나는 describeType()을 호출하기 전에 false로 설정하려고 시도했지만 아무 것도 변경하지 않았다.

그래서 어떤 방식 으로든 논리적으로 사용해야하는 XML 유형 변수에서이 메타 데이터 노드를 얻을 수있다. :

xmlDescription.metadata.(@name == "Table")[0] 

??? 사전에

덕분에

는 PS : 나는 4.6

답변

0

와우, 모두 거기에서 어떤 대답을 기대하지 페이스 북에 질문을 공유 한 후, 나는 옛 동료에서 작업 하나를 가지고 플래시 빌더를 사용하고 있습니다 :

은 분명히 플래시 빌더 4에서 나타난 버그가 있고, 내 문제는 그 범위에있다. 그것을 "고치려면"String을 사용하는 로컬 변수를 사용해야 작동 할 수 있습니다.

// before: 
public function uniqueMetadata(metadataName : String) : ReflectionMetadata 
{ 
    var x : XML = xmlDescription.metadata.(@name == metadataName)[0]; 
    // x is null here 

// after 
public function uniqueMetadata(metadataName : String) : ReflectionMetadata 
{ 
    var s : String = metadataName, 
     x : XML = xmlDescription.metadata.(@name == s)[0]; 
    // x is not null and contain the desired node! 

그래서 그래, 이상한 이상한 해결 방법을 아래에 그것이 작동되도록처럼 그래서 내 코드 교체. 나는 심각하게 그런 버그가 어떻게 일어날 수 있는지 이해하지 못한다. ...

어쨌든, 지금은 작동 중이고 다른 곳을 찾고있다. 내 코드에서 그 지역의 인자 값을 복사해야한다. 일부 E4X 필터링을 수행하기 전에 같은 유형의 변수를 사용하십시오.