2011-12-14 17 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()がスキンパーツが作成される前に呼び出されますが、4.5では、デフォルト状態のスキンパーツがそこに存在することが確かになります。

詳細な調査の結果、配列の最初の状態(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を作成できません」

明らかに、配列は動的で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

そこには2つの質問があると思います。

1)本当の問題は、コンポーネントのライフサイクルが変更された場合、私は が変更されていると私のプロジェクト のどの部分が影響を受ける可能性があります正確に何を知りたいということです。

私は2つのバージョンの違いの包括的な低レベル分析を見ていません。本当に心配していて、余裕があれば、diffツールを使って2つのSDKのソースコードを比較することができます。あまりにも多くの主要な構造上の変更があってはなりません。クラスやパッケージの名前が変更されているので、それほど悪くないかもしれません。私は多くのクラスが全く変わっていないと思います。

2)私が直面したもう1つの問題:ダイナミックモディファイアはもはやサブクラスによって継承されないようです。 これは純粋なActionScriptの問題ですので、私は とは違った扱いをするコンパイラだと思います。

これは簡単です。 dynamicは継承されていません。 Objectは動的なので、属性が継承されていればすべてのクラスも動的でなければなりません。

動的クラスインスタンスに関連する動作の変更があるように見える場合は、コード内に何か他のことがあります。

+0

1)私はそれを見ています:それは私のコードを壊すので、それは大きな変化です。コンポーネントの初期化では、物事が異なる順序で明確に実行されています。 diffツールは良いヒントですが、私がちょうど読むことができる変更ログはずっといいです。私はちょうど[Flex 4.5(http://opensource.adobe.com/wiki/display/flexsdk/Flex+4.5+Backwards+Compatibility)のために1つを見つけたが、4.6のために何も無し。 – RIAstar

+0

2)そこに何も起こっていない私のコード ':私の質問は私の質問に書いたとおりです(追加された機能を持たないArrayを拡張したクラスです)。 2つのバージョン間で変更されたのはコンパイラだけです。 – RIAstar

+0

私はnr.2でもう少しテストをしましたが、これは実際に修正されたバグだったようです。あなたが描いているように、私がしたことをすることは決してできませんでした。それにもかかわらず、それはそうだった。 – RIAstar

関連する問題