【问题标题】:Save multiple values per key in CoreData在 CoreData 中为每个键保存多个值
【发布时间】:2016-05-27 20:49:59
【问题描述】:

我目前正在研究 CoreData,需要为每个键保存多个值。在我的情况下,我只需要为 CoreData 中的单个键保存几个字符串,最多 9 个。

具体来说,我想为游戏保存玩家。我的游戏对象已经包含与这些玩家的关系对象,但我还想将玩家名称保存为游戏对象本身的记录,因为玩家可以被我的用户删除,我希望我的游戏对象对此免疫。

我知道在 Cloudkit 中,您可以将某个键的值设置为例如“字符串集”,这可以在创建一对多关系时在 CoreData 关系中完成。我想知道在常规的 CoreData 键值对中是否也有一种按惯例执行此操作的方法。

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:

    将 CoreData 视为对象而不是低级数据存储更容易。它并没有真正设计为键/值系统(除非任何对象的属性都可以被认为是字典)。

    对于您给出的示例,将已删除的播放器标记为不可用而不是删除它们可能更符合 CoreData 的对象持久性样式,以便您的历史记录保持不变。

    【讨论】:

    • 非常感谢您的快速回复。正如我从您的回答中了解到的那样,您针对我的特定情况提出了一种解决方法,这在这种情况下对我有帮助。我可以按照您建议的方式解决我的问题,但是,看看问题的核心:您知道是否以及如何在 coredata 对象属性中为每个键保存多个值?
    • 不是直接的。同样,考虑“键”与它的工作方式不匹配。如果它是一个简单的列表,您可以使用连接字符串来伪造它。对于更复杂的情况,请看这里的答案:stackoverflow.com/questions/1562676/…
    • 好的,等一下,到目前为止这确实有效。但是假设我的用户想通过删除他/她的玩家对象来重置他/她的统计数据,然后创建另一个具有完全相同名称的玩家对象。如果我现在这样做,在新对象中我也可以看到已删除玩家对象的所有统计信息。有什么解决办法吗?
    • 如果两组统计数据是不同的对象,您将如何查看它们? (它们不同的对象,对吗?)名称只是一个属性。
    【解决方案2】:

    您可以使用 Transformable 类型的属性来存储您的集合。 NSArray 和 NSSet 符合 NSCoding,因此 CoreData 可以为您处理所有数据转换、归档和取消归档。

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-12
      相关资源
      最近更新 更多