コアデータデータベースは保存されません
-
01-10-2019 - |
質問
スタンフォードCS193コースからパパラッチ2の割り当てを実装しようとしていますが、問題に遭遇しています。データベースを保存するための私の1回の呼び出しは、アプリが終了するときです(私はMike Postelのから大きく借りています バージョン 私のコードを確認するには):
- (void)applicationWillTerminate:(UIApplication *)application {
if (flickrContext != nil) {
if ([flickrContext hasChanges] == YES) {
NSError *error = nil;
BOOL isSaved = [flickrContext save:&error];
NSLog(@"isSaved? %@", (isSaved ? @"YES" :@"NO") );
// Replace this implementation with code to handle the error appropriately.
if(isSaved == NO){
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
}
残念ながら、これは仕事をしていないようです。これに関連する可能性のあるexec_bad_accessコールを時々取得していますが、データベースは決して保存しません。保存を他のピースに挿入しましたが、このルーチンではなく、そこで正常に動作します。マネージドオブジェクトのコンテキスト(FlickrContext、または私がそれをビューで呼んでいるもの)だけで、私のビューで管理されたオブジェクトをリリースしていません。
何か案は?
解決
よろしいですか applicationWillTerminate:
呼ばれていますか?
iOS4とバックグラウンドプロセスサポートにより、通常のアプリケーションライフサイクルは次のとおりです。
実行 - >背景 - >バックグラウンドサスペンド - >出口
あなたは applicationDidEnterBackground:
バックグラウンド状態に移行するときは呼び出しますが、バックグラウンドプロセスが一時停止または終了する場合、それ以上の通知はありません。
だから、あなたは本当に状態を救う必要があります applicationDidEnterBackground:
iOS4の場合とその場合 applicationWillTerminate:
古いバージョン用
他のヒント
flickrcontextあなたのmanagedobjectcontextですか?あなたがこの方法にぶつかったとき、私はそれがゼロであるか、そうでなければホースを持っていると確信しています。あなたはそれをビューでリリースしていると言います - 確かにあなたはそれをアプリケーションの代表者が所有するだけで1つだけを作成する必要があり、それをアプリデリゲートでのみリリースします dealloc
?
(そして、あなたがそれを使用する必要があるとき -
NSManagedObjectContext* moc = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
)
あなたのexec_bad_accessについて - nszombieenabled = yesはどうなりますか?静的アナライザーは何と言っていますか?
良い電話。私は実際にこれを昔ながらの(ブルートフォース)方法で解決しました。 ApplicationWillTerminateは呼ばれていなかったことがわかりましたが、それは明らかではありませんでした。私がWebから借りたデータベースを作成するためのルーチンは、私が確信していると確信しているNSARRAYを明示的にリリースすることでした。それは本質的にプログラムを時爆弾に変えました。私はまだそれが終わった限りそれが続いたのかをまだ理解していませんが、私が終了しようとするまで現れませんでした。
私はまだXcodeとCocoatouchを学んでいます。私はnszombieenabledについて知っていますが、まだ正しく使用する方法を理解していません。私はまだハムフィストされたモンキーステージにいます。ただし、ヒントをありがとう。彼らは親切でした。