我不确定这是核心数据问题还是 MagicalRecord 问题。
我的应用程序使用 MagicalRecord 来帮助使用 CoreData。当应用程序在安装后第一次运行时,当我保存新对象,然后应用程序退出并再次运行时,这些对象不存在。但是,在第一次重新运行应用程序之后创建的任何新对象都会正常保留。它仅在应用程序新鲜且数据库为空时发生。当应用程序运行一次后,即使数据库为空(通过下载应用程序并提取 sqlite 文件并在我的 Mac 上打开它来确认),它也会从那时起运行。
在我的应用委托(delegate)中,我执行以下操作
[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 文件中,也不会显示出来。但同样,如前所述,一旦应用程序在安装后退出一次,它现在就会开始正确地持久化对象,并且在下次运行该应用程序时您确实会看到这些对象。
在安装后的第一次运行中,应用程序是否尝试插入对象并不重要。应用程序的第二次运行一切正常。
我对可能发生的事情一头雾水。
MagicalRecord 版本是上周 github 上的最新版本。
最佳答案
您可能看不到更改,因为您正在使用 MR_contextForCurrentThread。自从引入 GCD 队列以来,这种方法存在根本性缺陷,并且已被弃用。我在 my blog 上完成了这个.
当您使用 MR_createEntity 时,如果没有指定 NSManagedObjectContext,您需要保存默认上下文,因为这是您所有数据所在的位置:
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
您的清理解决方法是不必要的,而且很可能会丢失数据。
关于ios - MagicalRecord 保存不会持续存在,直到应用程序第一次退出并重新运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18752460/