これは、アプリがメモリ警告を受け取ったときに行うべき正しいことを完全に理解していないことに起因する可能性があると思います (または、メモリ警告を受け取ったときに iOS が独自に行うことを理解していない可能性があります)。
ここに私の問題の簡略版があります:
私は持っていRootViewControllerます。TextViewControllerそれは私が持っている場所をプッシュしUITextFieldます。は、いくつかの詳細を表示TextViewControllerする を押すことができDetailViewControllerます。
までプッシュするDetailsViewControllerと、ナビゲーション ビュー コントローラー スタックが[RootVC, TextVC, DetailVC]になり、メモリ警告をシミュレートして、TextVCiOS によってメモリから自動的にアンロードされます。
問題 1: iOS が View Controller をアンロードする必要があると判断しました。ユーザーがポップDetailVCして に戻るときTextVC、状態情報 (テキスト フィールドに入力されたテキストなど) をどこに保存すればよいですか? 現在、View Controller がアンロードされてから再ロードされたため、テキスト フィールドは空白に戻ります。
問題 2:テキスト フィールドに戻ってTextVCタップすると、アプリがクラッシュします。ゾンビをオンにすると、テキスト フィールドをタップしたときに、どこかからメッセージを受け取っている人UIViewがいることがわかりました。responderDidBecomeActive:これはARCでもどのように可能ですか? 私のviewDidUnload方法では、テキスト フィールドを nil に設定し、デリゲート プロパティを nil に設定しています。
編集。新しい質問:オーバーライドdidReceiveMemoryWarningしTextVCて何もしないようにすることで、すべてを完全に修正しました。1から非常に悪いまでのスケールで、これはどの程度悪いですか?
EDIT 2.冗談ですが、私はばかで、まったく異なるが関連するコードで通知のオブザーバーを削除するのを忘れていました。iOSがあなたのがらくたを捨てたときに、状態情報がどのように/どこに保存されることになっているのか、まだわかりません。