Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios MagicalRecord保存不会持续,直到第一次退出并重新运行应用程序_Ios_Core Data_Magicalrecord - Fatal编程技术网

Ios MagicalRecord保存不会持续,直到第一次退出并重新运行应用程序

Ios MagicalRecord保存不会持续,直到第一次退出并重新运行应用程序,ios,core-data,magicalrecord,Ios,Core Data,Magicalrecord,我不确定这是核心数据问题还是MagicalRecord问题 我的应用程序使用MagicalRecord帮助使用CoreData。当安装后第一次运行应用程序时,当我保存新对象,然后退出应用程序并再次运行时,这些对象不存在。但是,在第一次重新运行应用程序之后创建的任何新对象都会正常保留。只有当应用程序是新的且数据库为空时,才会发生这种情况。当应用程序运行一次后,即使数据库是空的(通过下载应用程序并提取sqlite文件并在我的Mac上打开它来确认),它也会从那时起工作 在我的应用程序委托中,我执行以下

我不确定这是核心数据问题还是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"):
                  }
            }];
\u currentNotification=[PNotificationEntry MR_createEntity];
_currentNotification.*=;//设置各种属性
[[NSManagedObjectContext MR\u contextForCurrentThread]MR\u SaveToPersistentStore with Completion:^(布尔成功,N错误*错误){
如果(无!=错误)
{
NSLog(@“保存通知条目失败”);
}
其他的
{
NSLog(@“成功保存通知条目”):
}
}];
我知道它会保存下来,因为控制台中的神奇记录显示它成功了,而NSLog会显示它,更重要的是,正在监视更改的NSFetchedResultsController会拾取新对象并显示它

但一旦应用程序退出并重新运行,插入的对象都不会出现在sqlite文件中,也不会显示。但是,正如前面提到的,一旦应用程序在安装后退出一次,它现在就开始正确地持久化对象,并且您在下一次运行应用程序时确实会看到这些对象

安装后第一次运行时,应用程序是否尝试插入对象并不重要。应用程序的第二次运行正常

我不知道会发生什么事

MagicalRecord版本是上周github上的最新版本。

我对

[MagicalRecord setupAutoMigratingCoreDataStack];

[MagicalRecord cleanUp];

[MagicalRecord setupAutoMigratingCoreDataStack];

在我的应用程序中。这样做即使在应用程序的第一次运行时也能正常工作——保存实际上存储在数据库中…

您可能看不到更改,因为您使用的是MR_contextForCurrentThread。自从引入GCD队列以来,该方法存在根本性缺陷,已被弃用。这件事我是一个人经历的

当您使用MR_createEntity时,在不指定NSManagedObjectContext的情况下,需要保存默认上下文,因为所有数据都位于该上下文中:

[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

您的清理解决方案是不必要的,而且很可能会丢失数据。

根据github问题论坛的其他内容,我不再做
MR_contextForCurrentThread
之类的工作,但我还没有在没有它的情况下测试该问题。让我测试一下,我会回来报告的。我怀疑你的回答是100%正确的。Merci,Gracias和Dankethis让我免于头痛。谢谢!遗憾的是,MR的文件记录相当糟糕。我有同样的问题-你解决了这个问题吗?我使用的是默认上下文。它仅在setupAutoMigratingCoreDataStack中发生。与SetupCoreDataStackwith StorenameDiges不一样,尽管我不记得我到底做了什么。我们已经使用StackWithStoreName转到MR3和ClassicWithBackgroundCoordinatorSQLiteMagicalRecordStack