【发布时间】:2013-09-11 22:39:07
【问题描述】:
我不确定这是 Core Data 问题还是 MagicalRecord 问题。
我的应用程序使用 MagicalRecord 来帮助使用 CoreData。当应用程序在安装后第一次运行时,当我保存新对象,然后应用程序退出并再次运行时,这些对象不存在。但是,在第一次重新运行应用程序之后创建的任何新对象都会正常保留。它仅在应用程序新鲜且数据库为空时发生。当应用程序运行一次时,即使数据库是空的(通过下载应用程序并提取 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 文件中,也不会出现。但同样,如前所述,一旦应用在安装后退出一次,它现在就会开始正确地持久化对象,并且您确实会在应用的下一次运行时看到那里的对象。
安装后第一次运行时,应用程序是否尝试插入对象并不重要。应用程序的第二次运行正常。
我不知道会发生什么。
MagicalRecord 版本是上周 github 上的最新版本。
【问题讨论】:
-
我有同样的问题 - 你解决了吗?我正在使用默认上下文..
-
它只发生在 setupAutoMigratingCoreDataStack 中。不使用 setupCoreDataStackWithStoreNamed
-
是的,虽然我不记得我到底做了什么。我们已经使用 stackWithStoreNamed 转移到 MR3 和 ClassicWithBackgroundCoordinatorSQLiteMagicalRecordStack
标签: ios core-data magicalrecord