核心数据 - 托管对象问题

Posted

技术标签:

【中文标题】核心数据 - 托管对象问题【英文标题】:Core Data - Managed object question 【发布时间】:2010-12-19 17:31:28 【问题描述】:

我有 2 个关于 Core Data 的基本问题;

    到底什么是托管对象——它是否等同于一个类的实例。例如,如果有一个名为 Shape 的实体具有诸如 no of side & color 之类的属性,并且如果有 5 个条目显示在一个表中,这是否意味着有 5 个托管对象,每个对象都具有属性 no。边和颜色。我对这个基本概念有点困惑。

    Fetched Results Controller (FRC) 和表视图之间究竟有什么关系?我知道委托方法,但表格视图究竟如何影响/与 FRC 相关?

任何基本示例都会非常有用。谢谢。

【问题讨论】:

【参考方案1】:

第一季度。托管对象是应用程序持久化的某个实体的表示。它只是远离实际持久类型的通用抽象。所以你说托管对象将具有与具体类型相同的键/属性是正确的。由于 NSManagedbject 类实现了键值编码模式,您可以在运行时查询它的键/值...

- (id)valueForKey:(NSString *)key

有关 NSManagedObject 的完整文档,请参阅 here

第二季度。获取的结果控制器就是你的 UIViewController 对你的 UIView 的作用。它包含控制表视图持久性的逻辑。它在生活中的唯一目的是将数据库处理逻辑排除在 UITableView 之外。它通过允许您定义要在 UITableView 的上下文中执行的行为来实现。我的意思是它的委托提供了带有明确暗示对 UITableView 的影响的签名的方法。

【讨论】:

您能否用更简单的术语解释一下。我不是一个非常高级的 Obj-C 用户。 每次从持久存储中获取“实体”时,您都需要一种访问它们属性的方法。 NSManagedObject 只是单个“实体”数据的包装器。它允许您使用 valueForKey: 和 setValue:forKey: 访问它的属性。我发现很容易将 NSManagedObjects 视为一种掩蔽在当前获取的实体上的接口,它允许我像“普通”对象一样使用它们。【参考方案2】:

第一季度。是的,有 5 个托管对象可供您使用。如果您愿意,可以将所有五个放在一个数组中。托管对象只是一个术语,表示您有代码来管理数据库中的插入、更改和删除操作 - 换句话说,一些代码在其生命周期中对其进行管理。您通过 FRC 来处理它,FRC 从数据库中 ^fetches^ 对象的实例,并允许您的代码 ^control^ ^result^ 发生的情况。因此得名。

【讨论】:

以上是关于核心数据 - 托管对象问题的主要内容,如果未能解决你的问题,请参考以下文章

如何识别核心数据托管对象模型——哈希?

核心数据迁移问题:“持久存储迁移失败,缺少源托管对象模型。”

通过对象的枚举属性使用 NSPredicate 获取核心数据托管对象的问题

如何在核心数据中将非托管对象更改为托管对象

核心数据:创建多个托管对象,但只保存一些?

如何在托管对象上下文之外使用核心数据对象?