これが Core Data の問題なのか MagicalRecord の問題なのかはわかりません。
私のアプリは、CoreData の使用を支援するために MagicalRecord を使用しています。インストール後にアプリを初めて実行したとき、新しいオブジェクトを保存した後、アプリを終了して再度実行すると、それらのオブジェクトは存在しません。ただし、このアプリの最初の再実行後に作成された新しいオブジェクトは、通常どおり保持されます。アプリが新しく、データベースが空の場合にのみ発生します。アプリが 1 回実行されると、データベースが空であっても (アプリをダウンロードして sqlite ファイルを抽出し、Mac で開いて確認しました)、それ以降は機能します。
私のアプリデリゲートでは、次のことを行います
[MagicalRecord setupAutoMigratingCoreDataStack];
アプリは受信したプッシュ通知を保存しているため、アプリは発生したアクティビティを一覧表示できます。プッシュ通知が来ると、このコードが実行されます
_currentNotification = [PNotificationEntry MR_createEntity];
_currentNotification.* = <new value>; // set all kinds of attributes
[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) {
if (nil != error)
{
NSLog(@"failure to save notification entry");
}
else
{
NSLog(@"successful save of notification entry"):
}
}];
コンソールの魔法の記録ログが成功したことを示し、NSLog がそれを示しているため、保存されていることがわかります。さらに重要なことに、変更を監視している NSFetchedResultsController が新しいオブジェクトを取得して表示します。
しかし、アプリが終了して再実行されると、挿入されたオブジェクトはいずれも sqlite ファイルに存在せず、何も表示されません。ただし、前述のように、インストール後にアプリを一度終了すると、オブジェクトの永続化が正しく開始され、アプリの次の実行時にそこにオブジェクトが表示されます。
インストール後の最初の実行時に、アプリがオブジェクトを挿入しようとするかどうかは問題ではありません。アプリの 2 回目の実行は正しく機能します。
私は何が起こっているのか途方に暮れています。
MagicalRecord のバージョンは、先週の時点で github の最新バージョンです。