我来自SQL和n层系统,并尝试有效地使用Core Data来实现此用途:
问题是如何将该对象识别为唯一并在我可能拥有的0到1亿条记录中找到它?我知道你可以使用:
[managedObject objectID]
针对实例化托管对象上下文,以获取持久保存到数据存储的托管对象的通用唯一标识符。但是,如果我没有那个开始呢?你是如何得到这些独特的对象的。
是否正在查询足够的属性以获得独特的结果,或者是否有我遗漏的东西?
任何帮助赞赏//:)
答案 0 :(得分:1)
您不应该以SQL术语来考虑核心数据。就这样疯狂。实体不是表或记录,属性不是字段。关系不是连接表。核心数据是一个对象图管理系统。它维护活动对象之间的关系,同时包含数据和行为。任何可能或可能不涉及任何特定应用程序的SQL都发生在Core Data本身的幕后,并且对应用程序的设计或编码没有影响。
寻找独特物体的主要手段是通过他们的关系。关系越复杂,关系就越狭窄地定义特定对象。假设您有一个图表,其中包含三个实体链接:Department< - >> Employee<< - > Specialization。假设您要查找具有名为“Bob”的工程师的所有部门。您可以使用谓词来获取Department实体:
"employees.firstName=="Bob" AND employees.specialization.type=="Engineer"
这会返回少量的Department对象。如果您想自己查找员工,则可以使用谓词来过滤每个返回部门的员工关系,以查找您要查找的特定员工属性。
您可以将永久对象ID保存为存储在NSURL中的URI并查找特定对象,但这通常仅用于链接无法形成关系的对象,因为它们保存在单独的持久性存储中。
定位对象的主要方法是(1)使用fetch(2)查找对象的子集,然后遍历这些对象关系以查找相关对象。由于核心数据是围绕对象之间的关系构建的,因此结构良好的实体图通常可以通过其关系单独唯一地标识对象。