获取永久 ManagedObjectID 以与 UILocalNotifications 一起使用

发布于 2024-12-03 03:28:15 字数 590 浏览 0 评论 0原文

我正在寻找一些建议。

我将 CoreData 与 NSFetchedResultsController 结合使用来跟踪数据模型中的更改。当数据模型更改时,我使用 fetchedResultsController 通知来检查是否需要创建、删除或更新任何 UILocalNotification。

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

好的,所以这基本上可以工作,但我遇到的问题是,当我创建一个新对象并保存它时,我在 NSFetchedResultsController 中收到一个回调,表明该项目已创建,而 objectID 仍然是临时的。下次我听说该对象时,objectID 现在是永久的,并且与原始(临时)ID 无关。

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

I am looking for some advice.

I am using CoreData with NSFetchedResultsController to track changes in the data model. When the data model changes, I use the fetchedResultsController notification to check to see if any UILocalNotifications needs to be created, deleted, or updated.

To correlate the CoreData items with UILocalNotifications items, I add an ID into each UILocalNotification. Since UILocalNotifications can last past the execution of the app, I an using the objectID [t.objectID URIRepresentation] as the key.

Ok, so this mostly works, but the problem I have is that when I create a new object and save it, I get a call back in the NSFetchedResultsController that the item has been created WHILE the objectID is still temporary. The next time I hear about that object, the objectID is now permanent and it does not correlate with the original (temporary) ID.

Any suggestions on how to tackle this? What other ID could I use? How do I get a notification that has a permanent ID at the call to NSFetchedResultsController?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

骄兵必败 2024-12-10 03:28:15

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

您可以使用:

[NSManagedObjectContext obtainPermanentIDsForObjects:error:]  

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

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

A permanent NSManagedObjectID identifies a managed object as residing in a particular persistent store. Therefore, an objectID can't be permanent until the object is saved to a store.

You can use:

[NSManagedObjectContext obtainPermanentIDsForObjects:error:]  

…to force IDs to permanent but the method does have side effect similar to a save e.g. empty required properties can generate errors.

Of course, the simplest solution is to just save the managed objects before you get their objectIDs. If you want any external object to refer to them, you need to do that anyway.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文