2011-09-07 32 views
2

我正在寻找一些建议。获取用于UILocalNotifications的永久ManagedObjectIDs

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

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

好的,所以这主要工作,但我有的问题是,当我创建一个新的对象,并保存它,我得到一个回调在NSFetchedResultsController该项目已创建WHID objectID仍然是临时的。下次我听说有关该对象时,objectID现在是永久性的,并且与原始(临时)ID不相关。

有关如何解决这个问题的任何建议?我可以使用哪些其他ID?如何在调用NSFetchedResultsController时获取具有永久ID的通知?

回答

4

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

您可以使用:

[NSManagedObjectContext obtainPermanentIDsForObjects:error:] 

...强制标识永久,但该方法确实有类似救例如副作用空的必需属性可能会产生错误。

当然,最简单的解决方案是在获取对象标识之前只保存被管对象。如果你想要任何外部对象引用它们,你仍然需要这样做。

+0

*副作用与保存例如空的必需属性可能会产生错误* - 为什么我总是*设置所有我的托管对象属性为*可选* :)的另一个原因 –