0

私は自分のiOSアプリケーションで発生したクラッシュを追跡しました。これは、viewWillAppearの前にwillAnimateRotationToInterfaceOrientationが呼び出されていることに関連しています。willAnimateRotationToInterfaceOrientationが呼び出される前にviewWillAppear

私は2つのビューを持つアプリを持っています。基本的に、view1が消えると、viewWillAppearに再び表示されるときに再初期化されると仮定して、いくつかの配列を解放します。

しかし、私はview2で向きを変えてからview1に戻すと、view1がcalledviewWillAppearを呼び出してすべてを再初期化する前にwillAnimateRotationToInterfaceOrientationが発生し、クラッシュします。

ビューが現れてすべてが再初期化されるまで、willAnimateRotationToInterfaceOrientationを遅らせる方法はありますか?

私が見ることができる唯一の解決策は、viewAからview2に切り替えるときにwillAnimateRotationToInterfaceOrientationを使用しない(見栄えの悪い方向の変更を引き起こす)か、データを解放しないことです。

私は何をすべきか考えている人はいませんか?

NSArray* someData; 


-(void)somefun1{ 

    if (!someData) { 

     [self loadData]; 
    } 

    //use your data 
} 

-(void)somefun2{ 

    if (!someData) { 

    [self loadData]; 
    } 

    //use your data 

} 

-(void)loadData{ 
    //some loading code 
} 

注文を呼び出して、心イベントを必要はありません遅延ロードスタイルのコードを使用します。

答えて

1

あなたは次のように、あなたの問題を回避する遅延ロードのスタイルのコードを使用することができます。

+0

ありがとう、それは意味がありますが、私の配列が再初期化されているかどうかはどうすればわかりますか?私はif(myArray)とif(myArray = nil)とif([myArray count] == 0)を試しましたが、配列が解放され、再定義される前にこれらのどれも動作しないようです。 配列は@interfaceで定義されています。そのスコープはクラス全体であるはずですから、viewDidApparで初期化され、次にviewWillDissAppearで解放されます。このオリエンテーションの変更の場合、私はそれがリリースされたかどうかを判断する方法を見つける必要があります。グローバルブール値は機能しますが、それほどエレガントではありません。 – Jackson

+0

私は考えがあります。私は解放し、次にデータ配列をnilに設定する必要があるので、後でそれがnilと等しいかどうかをチェックし、そうでなければ再初期化することができますか? – Jackson

関連する問題