获取永久ManagedObjectID以用于UILocalNotifications

时间:2011-09-07 11:47:42

标签: ios core-data uilocalnotification

我正在寻找一些建议。

我正在使用CoreData和NSFetchedResultsController来跟踪数据模型中的更改。当数据模型更改时,我使用fetchedResultsController通知来检查是否需要创建,删除或更新任何UILocalNotifications。

要将CoreData项目与UILocalNotifications项目相关联,我会在每个UILocalNotification中添加一个ID。由于UILocalNotifications可以持续执行应用程序,因此我使用objectID [t.objectID URIRepresentation]作为密钥。

好的,所以这大部分都有效,但我遇到的问题是,当我创建一个新对象并保存它时,我在NSFetchedResultsController中回调该项已经创建,而objectID仍然是临时的。下次我听说该对象时,objectID现在是永久性的,它与原始(临时)ID无关。

有关如何解决此问题的任何建议?我可以使用其他什么ID?如何在调用NSFetchedResultsController时获得具有永久ID的通知?

1 个答案:

答案 0 :(得分:4)

永久NSManagedObjectID将托管对象标识为驻留在特定持久性存储中。因此,在将对象保存到商店之前,objectID不能是永久性的。

您可以使用:

[NSManagedObjectContext obtainPermanentIDsForObjects:error:]  

...强制ID为永久ID,但该方法确实具有类似于保存的副作用,例如空的必需属性可能会生成错误。

当然,最简单的解决方案是在获取objectID之前保存托管对象。如果您希望任何外部对象引用它们,则无论如何都需要这样做。