【发布时间】:2015-11-25 09:47:45
【问题描述】:
我正在尝试更多地了解核心数据。
用苹果的话来说,托管对象上下文是一个暂存器。只有在调用托管对象保存时,才会将数据写入文件。所以我怀疑托管对象上下文何时会从存储中加载数据。是在上下文初始化的时候(同时将持久存储协调器添加到上下文中)?
【问题讨论】:
标签: ios core-data nsmanagedobjectcontext
我正在尝试更多地了解核心数据。
用苹果的话来说,托管对象上下文是一个暂存器。只有在调用托管对象保存时,才会将数据写入文件。所以我怀疑托管对象上下文何时会从存储中加载数据。是在上下文初始化的时候(同时将持久存储协调器添加到上下文中)?
【问题讨论】:
标签: ios core-data nsmanagedobjectcontext
不,上下文在初始化时没有从存储中加载数据。新初始化的上下文将没有注册对象。
主要在您使用NSManagedObjectContext 的executeFetchRequest 方法从存储中获取数据时加载数据。
但如果现有的注册对象与尚未获取的对象有关系,也可以自动加载对象。
更罕见的是,可以使用objectWithID 或existingObjectWithID:error: 方法将对象单独加载到上下文中。
【讨论】:
来自苹果的 managedObjectContext - executeFetchRequest 方法讨论:-
满足请求指定条件的对象(它是请求指定实体的实例,如果存在则匹配请求的谓词)并且已插入上下文但尚未保存到持久存储,如果在该上下文上执行获取请求,则检索。'
这意味着获取请求总是从持久存储发生,并且如果上下文 1 中存在一些数据(在并发执行核心数据的情况下可能存在多个托管对象上下文),那么这些数据不会保存到持久存储(即. context.save 没有被调用),在获取数据时,只有在 context-1 上调用执行获取请求时,这些数据(未保存)才会与持久存储中的数据一起被获取。在任何上下文中执行 fetch 都会带来这些数据。
【讨论】: