【问题标题】:MR_saveToPersistentStoreAndWait freezing my appMR_saveToPersistentStoreAndWait 冻结我的应用程序
【发布时间】:2014-08-22 20:12:27
【问题描述】:
self.catContext = [NSManagedObjectContext MR_context];
Cat *cat = [Cat MR_createEntityInContext:self.catContext];

[self doSomething:@"someText" completion:^(NSDictionary *results) {
                if (results) {
                    cat.name = results[@"name"];
                    [cat.managedObjectContext MR_saveToPersistentStoreAndWait];
                }
            }];

应用程序冻结,Xcode 在 MR_saveToPersistentStoreAndWait 行暂停,该行在 com.apple.main-thread 上运行。为什么会冻结,如何解决?

编辑: 如果我用这个替换那行:

[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

应用不再冻结。然而,当我稍后去访问猫时,没有任何信息被保存到猫(名字等)。

【问题讨论】:

  • 您创建/更改了多少条记录?很多?您是否有一个同时保存上下文的后台线程?一般来说,保存不应该无限期地阻塞——但如果你有很多改变要做,它可能看起来就是这样。但是,如果另一个上下文对持久存储有锁定,这可能会导致您的另一个保存被阻止。

标签: ios core-data nsmanagedobjectcontext magicalrecord


【解决方案1】:

您为什么不使用 saveInBackgroundWithBlock 或一些最新的等效项并在完成块中更新您的 UI?

【讨论】:

  • saveInBackgroundWithBlock 已弃用。如果我不能在这种情况下使用它,我不知道为什么 MR_saveToPersistentStoreAndWait 存在。
  • 必须有等价于performBlock 而不是performBlockAndWait 的内容,并带有一个完成块。我不使用 MR 框架(它不会简化任何事情)。检查文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-04
相关资源
最近更新 更多