核心数据编辑属性并获取要编辑的唯一对象

时间:2010-07-18 21:23:23

标签: objective-c core-data

我来自SQL和n层系统,并尝试有效地使用Core Data来实现此用途:

  • 插入新的托管对象 - 我没有问题
  • 删除现有的托管对象 - 我没有问题
  • 编辑现有的托管对象 - 问题。

问题是如何将该对象识别为唯一并在我可能拥有的0到1亿条记录中找到它?我知道你可以使用:

[managedObject objectID]

针对实例化托管对象上下文,以获取持久保存到数据存储的托管对象的通用唯一标识符。但是,如果我没有那个开始呢?你是如何得到这些独特的对象的。

是否正在查询足够的属性以获得独特的结果,或者是否有我遗漏的东西?

任何帮助赞赏//:)

1 个答案:

答案 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)查找对象的子集,然后遍历这些对象关系以查找相关对象。由于核心数据是围绕对象之间的关系构建的,因此结构良好的实体图通常可以通过其关系单独唯一地标识对象。