【问题标题】:Importing And saving large data into coredata blocks every thing and application quits将大数据导入和保存到核心数据中会阻止一切,应用程序退出
【发布时间】:2014-03-12 10:42:11
【问题描述】:

我正在开发一个应用程序,其中必须从 Web 服务器获取大量数据,然后这些数据必须存储在核心数据中。

我正在为此使用私有上下文:

[privateContext performBlockAndWait:^{ //Code }];

首先,我使用调度队列从后台线程调用这个块。但核心数据运行不佳。然后我阅读了文档,发现这个块必须从主线程中调用。之后一切正常。

但现在的问题是,在数据存储过程中,如果我按下主页按钮并再次返回应用程序,应用程序的 UI 会挂起,并且一段时间后应用程序会崩溃而没有崩溃日志。而且我无法弄清楚问题是什么。

另一件事如果我从后台线程调用此块,则不会发生此问题,但随后其他问题开始出现。

【问题讨论】:

标签: ios core-data


【解决方案1】:

您能否发布执行该块的完整代码?

您在应用执行期间是否收到任何内存警告? 您是小批量存储和获取数据,还是一次性获取所有数据并存储?

我有根据的猜测如下:

performBlockAndWait 正在阻塞主线程。当您暂停应用程序并再次恢复时,主线程将继续被阻塞(因此 UI 不会更新,因为主线程负责 UI 更新)。如果您在内存中有大量数据用于存储并且您的应用程序阻塞了主线程,那么您的应用程序将由于内存使用或无响应而被终止。

我不明白你为什么在后台线程中执行此操作时遇到问题,我已经多次使用它,一切都像魅力一样。我已经将 NSOperationQueue 与块一起使用,并在 applicationWillResignActive 中创建了一个后台任务,以确保在暂停应用程序之前完成操作。

如果您能提供更多信息。

谢谢!

【讨论】:

  • 我没有收到任何内存警告。我将发布完整的代码。我已经编辑了我的问题。
  • 我不能发布完整的功能,因为它不允许我这样做,因为字符限制。
猜你喜欢
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-09
相关资源
最近更新 更多