2011-12-14 2 views
9

최근 내 프로젝트 중 일부가 반짝이는 새로운 Flex 4.6 SDK로 마이그레이션되었습니다. 그것이 단지 사소한 발표 였기 때문에 나는 많은 어려움을 예상하지 못했습니다. 그러나 사실 나는 그 곳곳에 수 백 가지의 오류가 있습니다. 이 오류는 주로 Spark SkinnableComponent에서 발생합니다. 예를 들면 :Flex 4.5와 4.6 사이의 점등 라이프 사이클이 바뀜

override protected function getCurrentSkinState():String { 
    return mySkinPart.someProperty ? "normal" : "someOtherState"; 
} 

4.5에서 잘 작동,하지만 4.6에서 나에게 nullpointer 오류가 발생합니다. 그 이유는 충분히 간단합니다 : 4.6에서 getCurrentSkinState()이 skinpart가 생성되기 전에 호출되는 반면, 4.5에서는 기본 상태의 skinpart가있을 것이라고 확신 할 수 있습니다.

추가 조사를 통해 배열의 첫 번째 상태 대신 undefined (이제는 getCurrentSkinState()이 호출 될 때까지)의 초기 상태가 지금은 undefined이라고 생각했습니다.

이러한 문제를 해결하는 것은 일반적으로 쉽고 내 편에서 다소 방어적인 프로그래밍이 필요합니다. 하지만 그건 내 진짜 문제가 아니야.

진짜 문제 구성 요소의 수명주기가 변경된 경우, 나는이 변경 내 프로젝트의 어떤 부분에 영향을 미칠 수 있습니다 무엇 정확히 을 알고 싶습니다 것입니다.

누군가가 이것에 대해 밝히거나 최소한 내가 올바른 정보를 읽을 수있는 적절한 곳을 가리킬 수 있다면 매우 감사 할 것입니다. (내가 찾을 수있는 유일한 릴리스 노트는 새 모바일 구성 요소만을 다루기 때문에) .


편집 (이 질문을 변경하지 않습니다 난 그냥 당신과 함께 내 연구 결과를 공유하기를 원해요)

에게 난 그냥 우연히 또 다른 문제 : dynamic 수정이 더 이상 상속되지 것을 서브 클래스. 이것은 순수한 ActionScript 문제이므로 다른 방식으로 처리하는 컴파일러라고 생각합니다.

설명해 드리겠습니다.

var t:Array = new MyClass(); 
t.push("hello"); 
  • SDK 4.5.1 : 아무 문제
  • SDK 4.6이 같은이 사용자 정의 배열에 새로운 항목을 밀어하려고하면, 지금

    public class MyClass extends Array { } 
    

    :이 클래스를 고려 : "런타임에 MyClass에 속성 0을 만들 수 없습니다"

분명히 그 이유는 Array가 동적이고 MyClass가 없기 때문입니다. 고정 :

public dynamic class MyClass extends Array { } 

오류가 발생했습니다.

하지만 이와 같은 코드가 있고 소스 코드에 액세스 할 수없는 타사 라이브러리를 사용하면 어떻게됩니까? 내 응용 프로그램이 중단되고 그것을 고칠 수있는 방법이 없습니다. 내 말은 : 어서, 도트 - 릴리스에 대한 사소한 변화가 아니야.

+0

나는 이것을 너무 심하게 여겼다. 나는 버그라고 생각한다. 구성 요소가 활성화되기 전에 피부 부품에 액세스하려고하면 볼 수 있듯이 발생합니다. 내 "솔루션"은 callLater()를 사용하여 다음 프레임의 스킨 부분에 액세스하는 것입니다. – sydd

+0

@sydd 버그라고 생각하지 않습니다. 그것은 프레임 워크에서 일관된 변화이며, 그것에 대해 더 알고 싶습니다. skinpart가 언제 사용할 수 있는지 알고 싶으면'partAdded()'를 오버라이드하십시오. callLater()를 사용하는 것은 정확하지 않습니다. – RIAstar

+0

@RIAstar 혹시 이것에 대한 해결책을 찾았습니까? 4.5에서 4.6으로 업데이트하는 중대한 문제가 있습니다. ([여기 자세히] (http://stackoverflow.com/questions/11840098/upgrading-to-flex-4-6-from-flex-4-5)) 당신이 통찰력을 가지고 있다면 그것은 절대적으로 나의 하루를 만들 것입니다. – NoobsArePeople2

답변

2

거기에 두 가지 질문이 있다고 생각합니다.

1) 진짜 문제는 구성 요소 수명주기가 변경된 경우, 나는 이 변경 내 프로젝트 의 어떤 부분에 영향을 미칠 수 있습니다 정확히 알고 싶습니다 것입니다.

두 버전 간의 차이점에 대한 포괄적 인 저급 분석을 보지 못했습니다. 정말로 걱정하고 시간을 허비한다면 diff 도구를 사용하여 두 SDK의 소스 코드를 비교할 수 있습니다. 너무 많은 주요 구조 변화가 없어야합니다. 클래스 또는 패키지의 이름이 변경되어 너무 나쁘지 않을 수도 있습니다. 나는 많은 수업이 전혀 바뀌지 않을 것이라고 기대한다.

2) 방금 설명한 또 다른 문제는 동적 수정자가 더 이상 하위 클래스에 상속 된 것처럼 보입니다. 이것은 순수한 ActionScript 문제이므로 다른 언어로 처리하는 컴파일러 인 것 같습니다.

이 방법이 더 쉽습니다. dynamic은 상속 된 적이 없습니다. Object은 동적이므로 속성이 상속 된 경우 모든 클래스도 동적이어야합니다.

동적 클래스 인스턴스와 관련된 동작이 변경된 것으로 보이는 경우 코드에 다른 문제가 있습니다.

+0

1) 나는 그것을 본다 : 그것은 나의 코드를 깨뜨린다. 그래서 그것은 중요한 변화이다. 구성 요소 초기화시 다른 것들이 명확하게 실행되고 있습니다. diff 도구는 좋은 팁이지만, 내가 읽을 수있는 changelog는 훨씬 더 좋을 것이다. 방금 [Flex 4.5 용] (http://opensource.adobe.com/wiki/display/flexsdk/Flex+4.5+Backwards+Compatibility)를 발견했지만 4.6 용으로는 아무 것도 없었습니다. – RIAstar

+0

2) '그 밖의 일은 없습니다. 내 코드 ': 내 코드는 정확히 내 질문에 작성했습니다 (추가 된 기능이없는 배열을 확장하는 클래스). 두 버전간에 변경된 유일한 것은 컴파일러입니다. – RIAstar

+0

nr.2에 대해 더 많은 테스트를 해봤는데 실제로 버그가 수정 된 것 같습니다. 당신이 말했듯이, 내가 한 일을 결코 해낼 수 없었습니다. 그럼에도 불구하고 그렇습니다. – RIAstar

관련 문제