使用 Magicalrecord 拥有单个实体的最佳方式
Posted
技术标签:
【中文标题】使用 Magicalrecord 拥有单个实体的最佳方式【英文标题】:Best way to have a single Entity using Magicalrecord 【发布时间】:2013-08-27 15:24:47 【问题描述】:我正在寻找实现此行为的最佳解决方案:
我有一个名为 Customer 的实体,它在 Core Data 上只有一个条目,因为 Customer 将只有一个。
实现这一点的最佳解决方案是什么?是否每次创建之前检查实体是否存在?
非常感谢
【问题讨论】:
【参考方案1】:如前所述,您可以使用单个对象 [NSUserDefaults standardUserDefaults]。
但如果您更喜欢使用 CoreData,请写下:
Customer* customer = [Customer MR_findFirst];
if (customer != nil)
//do something with it
else
[Customer MR_importFromObject:JSONToImport];
BDW:
MR_importFromObject 方法自动检查是否存在具有特定 id 的实体(对于 id 键,它使用您的实体名称的属性加上“ID”。(在您的情况下 “customerID”) 或名为“mappedKeyName”的键。
如果具有此密钥的实体已经存在 - Magical Record 只需更新此实体。
因此,如果您在实体中指定此值,只需编写:
[Customer MR_importFromObject:JSONToImport];
【讨论】:
这正是我正在做的事情!谢谢! :)【参考方案2】:如果只有一个实例,最好的解决方案通常是不要把它放在 Core Data 中。它给你的东西很少,而且像你看到的那样增加了复杂性。将必要的信息保存在属性列表中,甚至保存在用户默认值中。
【讨论】:
【参考方案3】:在创建新实体之前检查实体是否存在是个好主意。
您可以获取客户实体类型的所有实体并将其全部删除,然后再添加新实体是另一种方法。
您还可以有一个简单的方法来获取当前客户或创建一个然后更新它的所有属性。
这在某种程度上取决于您如何获取数据以及您希望相关对象发生什么。
【讨论】:
计算实体实例的数量也可以是一种检查机制。以上是关于使用 Magicalrecord 拥有单个实体的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章
使用 MagicalRecord 保存实体 - 还尝试保存不同的实体?
Swift 3 - MagicalRecord:如何在空实体上使用 findFirst