最近、私のプロジェクトの一部が光沢のある新しい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 { }
エラーがなくなりました。
しかし、このようなコードを持ち、ソースコードにアクセスできないサードパーティのライブラリを使用した場合はどうなりますか?私のアプリケーションは壊れてしまい、それを修正する方法はありません。つまり、ドット・リリースのためのマイナーな変更はありません。
私もこのことを信じています。私はそのバグを想定しています。コンポーネントが初期化される前に、スキンパーツにアクセスしようとすると、わかります。私の "解決策"は、callLater()を使用して次のフレームのスキンパーツにアクセスすることです。 – sydd
@syddバグではないと思います。それはフレームワークの一貫した変更であり、私はそれについてもっと知りたいと思っています。 skinpartがいつ利用可能かを知りたい場合は、単に 'partAdded()'をオーバーライドしてください。 callLater()を使うのはまあまあです。 – RIAstar
@RIAstarこれまでの解決策を見つけましたか?私はいくつかの重大な問題を4.5から4.6にアップデートしています([詳細はこちら](http://stackoverflow.com/questions/11840098/upgrading-to-flex-4-6-from-flex-4-5))あなたが洞察力を持っていれば、絶対に私の一日を築くことができます。 – NoobsArePeople2