最近,我正在使用iOS中的时间表应用程序,我在使用Core Data时遇到了麻烦。
我的应用程序的主用户界面类似于Apple创建的原始日历应用程序,我将所有事件数据保存在Core Data数据库中。
我创建了一个 UIManagedDocument ,以便使用 NSManagedObjectContext 从数据库中获取数据,一切正常。
但是,我需要使用 NSManagedObjectContext 在运行时期间在几个不同的视图控制器中多次获取数据。每次我这样做,我需要重新打开 UIManagedDocument ,但打开文档需要花费太多时间(可能需要2秒甚至更长时间,我必须在视图中显示一个微调器)。 / p>
所以这是我的问题:
感谢。
答案 0 :(得分:1)
对于如何执行此操作,您会收到很多不同的意见,但基本上您只需要打开一次文档。这是由一些完成工作并存储它的对象完成的,因此当它被另一个视图控制器询问时它可以再次返回它。
许多人为此创建单身人士或将其放入App Delegate。我已经实现了一个protocol
,它允许我把它放在特定应用程序方便的地方,而我的其他代码不必知道有关返回信息的对象的任何信息。只要它响应协议,它就可以是App Delegate,单例类或任何其他对象类型。
我在上面的示例中放置的协议只返回有关数据库所在位置的信息。在我的实际实现中,我有一个openDatabase
方法,回调后让我知道它何时完成以及自动初始化和更新方法。
您还可以通过主线程执行打开操作来提高性能。这可以使您的UI保持响应,但不会更快地显示数据,您必须小心托管对象上下文及其所在的线程。
祝你好运......