我有一个基于Core Data的iPhone应用程序,需要在终止时保存1000个托管对象。这需要8秒以上,然而,如果操作系统未在大约完成时杀死应用程序。 6秒。
我不想提前保存对象,因为用户必须等待8秒才能显示结果。
是否有可能以某种方式在后台线程中保存对象,同时仍然对主线程中的NSManagedObjectContext进行(只读)访问以显示数据?或者是否可能以某种方式复制托管对象,并将重复项传递给后台线程以进行保存?
为了澄清,现在应用程序中发生了什么:我有一个后台线程,可以在大约1秒内导入1000多个对象。如果我在导入时保存,则需要的时间超过1秒。因此,为了以最小延迟显示那些项目,上下文被切换而不保存到主线程,并且用户尽可能快地获得他的结果。
我现在遇到了如何保存这些对象而无需用户等待8秒的问题。如果我在移交之前保存在后台线程中,则用户必须等待。如果我在移交后保存在前台线程中,则用户必须等待。我现在能看到的唯一两种可能的方法是:
这两种方法似乎都不可能(至少根据Core Data文档)。那么除了让用户等待更长时间之外没有其他解决方案(并且可能会显示一个漂亮的旋转小时玻璃: - )?
此致 约亨
答案 0 :(得分:8)
是的,有一种方法可以从后台线程中保存托管对象上下文,或者更准确地说,它通常被称为“在后台线程中导入,并在主线程中显示”。这样,托管对象在导入时会逐个保存,而不是在终止时一次保存。
我刚刚在SO处就类似问题写了一个简短的答案,但你应该阅读Apple doc。 有很多潜在的陷阱,所以请仔细阅读。然后阅读Apple's "Efficiently Importing Data"。这也是必读的!而Marcus Zarra的CoreData book也很有帮助。
CoreData多线程技术有点棘手,但确实有所回报。祝你好运!