我正在寻找一些建议。
我正在使用CoreData和NSFetchedResultsController来跟踪数据模型中的更改。当数据模型更改时,我使用fetchedResultsController通知来检查是否需要创建,删除或更新任何UILocalNotifications。
要将CoreData项目与UILocalNotifications项目相关联,我会在每个UILocalNotification中添加一个ID。由于UILocalNotifications可以持续执行应用程序,因此我使用objectID [t.objectID URIRepresentation]
作为密钥。
好的,所以这大部分都有效,但我遇到的问题是,当我创建一个新对象并保存它时,我在NSFetchedResultsController中回调该项已经创建,而objectID仍然是临时的。下次我听说该对象时,objectID现在是永久性的,它与原始(临时)ID无关。
有关如何解决此问题的任何建议?我可以使用其他什么ID?如何在调用NSFetchedResultsController时获得具有永久ID的通知?
答案 0 :(得分:4)
永久NSManagedObjectID将托管对象标识为驻留在特定持久性存储中。因此,在将对象保存到商店之前,objectID不能是永久性的。
您可以使用:
[NSManagedObjectContext obtainPermanentIDsForObjects:error:]
...强制ID为永久ID,但该方法确实具有类似于保存的副作用,例如空的必需属性可能会生成错误。
当然,最简单的解决方案是在获取objectID之前保存托管对象。如果您希望任何外部对象引用它们,则无论如何都需要这样做。