这会仅用TemporaryID填充子上下文吗?

时间:2015-06-01 19:49:52

标签: ios objective-c core-data concurrency

我想知道是否有人能够回答这个问题。我正在使用Corecus堆栈构建我的应用程序,正如Marcus Zarra在他的博客http://martiancraft.com/blog/2015/03/core-data-stack/中所描述的那样。他将managedObjectContext的用法描述为单一真实来源,其中所有插入/更新/删除都应在此上下文中完成。没有例外。奇怪的是,由于这个上下文是私有上下文的子上下文,如果我继续将新的NSManagedObject插入到managedObjectContext中......这个上下文不会被temporaryObjectID填充,因为父上下文没有刷新子上下文吗?我问这个问题,因为如果我只有临时的那个,如何使用NSManagedObjectID从PSC中检索这个NSManagedObject?我是否必须使用privateContext显式抛出另一个performBlock来获取它?这感觉就像一个非常不优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

您可以在保存更改之前强制转换,例如:

[moc obtainPermanentIDsForObjects:moc.insertedObjects.allObjects error:&error];

据我了解,该对象已经在两种情况下。您不需要从商店中检索它,因为它已缓存。

您仍然拥有该对象,并且可以根据对象的属性查询商店。 ID的唯一需要是你需要将它传递给另一个线程,但你只有一个单一的真实来源。还有什么其他线索?

<强>更新

在讨论了你的应用之后,如果不需要复杂性,我建议不要增加复杂性。你已经有了一个API线程。不要试图通过将API任务拆分为多线程子任务来过早地优化它。您正在增加开销以及在私有上下文之间传递ID的不必要负担。

将后台API作为单个操作进行处理,让它下载,插入,保存,然后通知SSoT,然后可以(重新)获取。

如果它足够响应,那么你已经完成了。您有一个简单的包含方法,无需传递ID。

一般情况下,除非需要,否则不要优化。