核心数据 - 实例变量更新中的NSManagedObjects

时间:2012-12-17 09:46:04

标签: objective-c cocoa core-data nsmanagedobject

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

从获取请求返回的数组包含对实时管理对象的引用。除非您更改不同的fetchLimit或batchSize,否则您将获得一个包含错误对象的数组,因为查询将返回对象。

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

托管对象始终具有自己的最新值,该值最后称为“保存”。因此,如果您对self.allEmployees进行修改,则需要在MOC上调用save,这会将更改广播到所有其他emoployee对象。

这也是KVO在NSManagedObject属性上工作的原因,因为它们没有得到影响它们的所有已保存更改。