【问题标题】:When managed object context get loaded with data from persistent store当托管对象上下文从持久存储中加载数据时
【发布时间】:2015-11-25 09:47:45
【问题描述】:

我正在尝试更多地了解核心数据。

用苹果的话来说,托管对象上下文是一个暂存器。只有在调用托管对象保存时,才会将数据写入文件。所以我怀疑托管对象上下文何时会从存储中加载数据。是在上下文初始化的时候(同时将持久存储协调器添加到上下文中)?

【问题讨论】:

    标签: ios core-data nsmanagedobjectcontext


    【解决方案1】:

    不,上下文在初始化时没有从存储中加载数据。新初始化的上下文将没有注册对象。

    主要在您使用NSManagedObjectContextexecuteFetchRequest 方法从存储中获取数据时加载数据。

    但如果现有的注册对象与尚未获取的对象有关系,也可以自动加载对象。

    更罕见的是,可以使用objectWithIDexistingObjectWithID:error: 方法将对象单独加载到上下文中。

    【讨论】:

    • 这意味着每个获取请求都会很昂贵。我的信念是数据将被预加载到上下文中,并且在上下文的数据上进行获取。
    【解决方案2】:

    来自苹果的 managedObjectContext - executeFetchRequest 方法讨论:-

    满足请求指定条件的对象(它是请求指定实体的实例,如果存在则匹配请求的谓词)并且已插入上下文但尚未保存到持久存储,如果在该上下文上执行获取请求,则检索。'

    这意味着获取请求总是从持久存储发生,并且如果上下文 1 中存在一些数据(在并发执行核心数据的情况下可能存在多个托管对象上下文),那么这些数据不会保存到持久存储(即. context.save 没有被调用),在获取数据时,只有在 context-1 上调用执行获取请求时,这些数据(未保存)才会与持久存储中的数据一起被获取。在任何上下文中执行 fetch 都会带来这些数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      相关资源
      最近更新 更多