2012-02-14 4 views
0

私はiPhoneアプリをほぼ完成しました。私はXCode 4とIOS Simulatorを使ってテストしています。 >モーダル - - >表示2 - >モーダル - >表示3 - >モーダル - >表示4IOS - モーダルUIViewはメモリ警告の後にデリゲートを失っています

ビュー1: 私のアプリは、ビューのシリーズは、モーダルをオープンしました

ビュー2ビュー3の代理人であると見る3はView4が表示されていると私は「メモリ警告をシミュレート」しようとすると、私は戻ってView3に行くことができるんだけど、View3があるビュー4.

の代理人であります代理人([self.delegate NotifySave:self])に電話をかけることができません。

デリゲートを呼び出す前にブレークポイントを配置すると、 "0xsomething"の代わりに "0x0"が表示されます。 「ホーム」ボタンを使ってアプリケーションを「終了」しても、アプリケーションを再実行すると問題は(もちろん)残っています。

質問は以下のとおりです。

  • は、他の誰かが同じ問題を経験しましたか?
  • この問題はシミュレータにのみ存在しますか? (私は実際のiPhoneで警告を再現することができません)
  • 誰か提案がありますか?
  • View2のリリースを防ぐことはできますか? (私はこれが問題の原因だと思う)

ありがとうございました。

答えて

2

obj-c 2.0プロパティを使用してデリゲートを格納する場合は、assignの代わりにretainに依存するようにモデルを変更してみてください。これにより、これらの状況でデリゲートがあなたの下から解放されないようにします。このルートを使用する場合は、2つのオブジェクトが互いに保持され、決して解放されない「保持」サークルを持たないようにすることが重要です。バックグラウンド化のために

@property (nonatomic, retain) id delegate; 

、あなたは(- (void)applicationDidEnterBackground:(UIApplication *)applicationに)終了し、リニューアルにそれらを復元上のメモリのうち、これらすべての項目をクリア、その後、あなたはあなたのアプリケーションの状態を復元するために必要な情報を格納するシステムを開発する必要があります。これにより、アプリが頻繁に「パージされる」のを防ぎ、毎回正方形1からアプリを再起動するのではなく、再起動時に復元できるようになる可能性が高くなります(- (void)applicationWillEnterForeground:(UIApplication *)application)。

+0

ARCを使用している場合は、strongを使用する必要があります。 –

+0

提案していただきありがとうございます。実際には、問題は、 "didUnLoad"がポインタをnilに設定しているために発生しました。私はそれをコメントアウトし、それを使用した直後にポインタをnilに設定するだけです。 – Daniele

+0

私は同じ問題を抱えていました(それはUISplitViewControllerでした)。ありがとうございました! – DOOManiac

関連する問題