【问题标题】:CoreData blocks indefinitely on first fetch?CoreData 在第一次获取时无限期地阻塞?
【发布时间】:2012-08-17 19:21:25
【问题描述】:

所以我遇到了一个奇怪的情况。

当我重新安装我的应用程序的开发版本时,我会创建一个 CoreData 数据库。在我的应用程序启动序列的其他时间,我尝试了一个简单的NSPredicate-filtered 获取请求。

通常(不是每次),第一次获取会无限期地阻塞,应用需要重新启动才能正常继续。

我似乎不知道如何处理这个问题,而且由于我无法可靠地重现这个问题,所以每次我做一些我认为可行的事情,后来发现它没有任何帮助。

对此有什么想法吗?

【问题讨论】:

  • 你确定你没有在另一个线程中创建托管对象上下文并使用它(或从另一个线程使用它),所以会发生死锁吗?顺便贴一些代码...

标签: ios core-data nsfetchrequest


【解决方案1】:

在 iOS 中使用 Core Data 的一个好方法是将创建和所有访问放在调度队列后面。因此,您在初始化例程中创建一个串行调度队列,然后通过向该队列调度块来创建和填充它。由于队列是串行的,因此您显然可以异步执行所有操作。也以这种方式获取,然后当它成功时,您可以将一些消息发布到主队列和您的应用程序委托,表明应用程序已准备好运行。

当您的应用启动并需要设置核心数据时,设置一些标志,然后阻止 UI,抛出一个微调器,播放音乐(无论如何),直到您获取该数据。

【讨论】:

  • 为了补充大卫的精彩回复,您可以让第一次抓取有抓取限制,所以它只抓取您需要立即显示的那一点点。
  • @JodyHagins 这是个好建议!
  • 太棒了。当我阻止用户界面时,我必须找到一些电梯音乐。谢谢!
猜你喜欢
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2012-05-14
相关资源
最近更新 更多