1

假设我Employee通过执行以下操作来获取所有实体对象:NSArray *employees = [context executeFetchRequest:request error:&error];

然后我通过执行以下操作在我的类中设置一个实例变量:self.allEmployees = employees;

然后稍后在我的应用程序中,我将对我的员工对象进行一些修改,但不是通过访问self.allEmployees. 我正在从另一个班级修改它们。

我的self.allEmployees数组是否会更新为我从另一个类对员工对象所做的更改?或者我的self.allEmployees数组是否会处于我第一次执行提取时员工对象的状态?(我怀疑是后者)

4

2 回答 2

1

如果您更改从获取中收到的对象,并且不复制它们,那么可以。这些都是指针。所以你不应该需要做另一个 fetch 请求。

如果您更改员工的值,则指针不会更改。唯一改变的是实例变量或属性。

于 2012-12-17T09:50:34.287 回答
1

您从 fetch 请求中返回的数组包含对实时托管对象的引用。除非您更改不同的 fetchLimit 或 batchSize,否则您将获得一个包含与查询返回对象一样多的故障对象的数组。

当您访问这些故障对象之一的属性时,CoreData 会透明地检索所有属性的实际数据并将这些数据返回给您。

一个托管对象总是有它自己最近一次调用保存的最新值。因此,如果您对 self.allEmployees 进行修改,您需要在 MOC 上调用 save ,这会将更改广播到所有其他员工对象。

这也是 KVO 对 NSManagedObject 属性起作用的原因,因为它们会收到所有影响它们的已保存更改的通知。

于 2012-12-17T09:58:47.350 回答