在 Core Data 中存储指针

Posted

技术标签:

【中文标题】在 Core Data 中存储指针【英文标题】:Storing pointers in Core Data 【发布时间】:2011-11-07 19:15:10 【问题描述】:

我将一些对象存储在具有固有寿命的核心数据中。我在此生命周期内安排了有关对象创建的本地通知,然后处理该对象时触发了通知。

问题是对象可以提前结束。但是本地通知不知道这一点,并且仍然在各自的时间触发,这会导致混乱。有没有办法将指向通知的指针与对象一起存储?因此,如果它提前结束,它可以取消它。

我想坚持通知,因为我需要用户知道它何时完成,如果它正常完成。并且通知不依赖于正在运行的应用程序。

基本问题您可以在核心数据中存储指向对象的指针吗?第二个问题是本地通知是否会在其生命周期内更改内存地址

我知道如果提前结束,我可以将它们全部取消并重新安排所需的时间,但这似乎很浪费,希望有更好的方法。

【问题讨论】:

【参考方案1】:

UILocalNotification 不可序列化(它没有实现NSCoding),所以你不能用Core Data 持久地存储它。我建议您将 Core Data 实体的 managedObjectID 以可序列化的形式(例如,作为 URL)添加到通知的 userInfo 属性中。如果您需要删除特定通知,请在 UIApplications 的 scheduledLocalNotifications 数组中搜索其 userInfo 属性中具有相应托管对象 ID 的本地通知,然后通过 cancelLocalNotification: 取消该通知。

【讨论】:

【参考方案2】:

请注意 - 我一直在审查这个主题,我看到一些与@MrMage 的答案相矛盾的信息:

    UILocalNotification 符合the Apple doc 的 NSCoding 这是关于 *** 的回答,它描述了如何将本地通知存储在 nsdata 中,这应该使您能够将本地通知作为属性存储在实体中:Delete a particular local notification

虽然不是这个主题的专家,所以任何反馈都会很棒。

【讨论】:

以上是关于在 Core Data 中存储指针的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 实体中的可转换属性可以是指向 c 结构的指针吗?我的变压器没有被调用

在 void 指针中存储和打印字符串

使用 typedef 的不兼容的块指针类型

一棵树的存储结构可以采用双亲表示法,即父指针数组表示法。试给出相应的类定义。其中,每个树结点包含两个成员:数据域data和双亲指针parent;树则有一个树结点数组NodeList[MaxSize](

对 C 字符串数组使用简单的 void 指针

链表中的头指针和头结点(转)