打开UIManagedDocument需要花费太多时间

时间:2013-05-23 17:03:13

标签: iphone ios objective-c core-data uimanageddocument

最近,我正在使用iOS中的时间表应用程序,我在使用Core Data时遇到了麻烦。

我的应用程序的主用户界面类似于Apple创建的原始日历应用程序,我将所有事件数据保存在Core Data数据库中。

我创建了一个 UIManagedDocument ,以便使用 NSManagedObjectContext 从数据库中获取数据,一切正常。

但是,我需要使用 NSManagedObjectContext 在运行时期间在几个不同的视图控制器中多次获取数据。每次我这样做,我需要重新打开 UIManagedDocument ,但打开文档需要花费太多时间(可能需要2秒甚至更长时间,我必须在视图中显示一个微调器)。 / p>

所以这是我的问题:

  1. 打开managedDocument的正确方法是什么?(我的意思是在午餐图像时间打开它?)
  2. 有没有办法只打开一次managedDocument并在运行时保持打开状态?(所以我可以一直使用它的上下文)
  3. 我创建的managedDocument中是否存储数据?(我发现如果删除文档,数据就会消失)
  4. 感谢。

1 个答案:

答案 0 :(得分:1)

对于如何执行此操作,您会收到很多不同的意见,但基本上您只需要打开一次文档。这是由一些完成工作并存储它的对象完成的,因此当它被另一个视图控制器询问时它可以再次返回它。

许多人为此创建单身人士或将其放入App Delegate。我已经实现了一个protocol,它允许我把它放在特定应用程序方便的地方,而我的其他代码不必知道有关返回信息的对象的任何信息。只要它响应协议,它就可以是App Delegate,单例类或任何其他对象类型。

请参阅importing AppDelegate

我在上面的示例中放置的协议只返回有关数据库所在位置的信息。在我的实际实现中,我有一个openDatabase方法,回调后让我知道它何时完成以及自动初始化和更新方法。

您还可以通过主线程执行打开操作来提高性能。这可以使您的UI保持响应,但不会更快地显示数据,您必须小心托管对象上下文及其所在的线程。

祝你好运......