我正在尝试更多地了解核心数据。
用苹果管理对象的话说,上下文是一个暂存器。只有在调用托管对象保存时,才会将数据写入文件。所以我怀疑托管对象上下文何时会从商店加载数据。它是否在上下文初始化时(将持久性存储协调器添加到上下文中)?
答案 0 :(得分:2)
不,在初始化时,上下文未加载来自商店的数据。新初始化的上下文将没有已注册的对象。
数据主要是在您使用objectWithID
的{{1}}方法从商店中提取时加载的。
但是,如果现有注册对象与尚未获取的对象有关系,则也可以自动加载对象。
更少见的是,可以使用existingObjectWithID:error:
或 if signupError == nil {
print("User \(user.username!) signed up OK!")
} else if signupError?.code == 202 {
print("Username taken. Please select another")
} else if signupError?.code == 203 {
print("e-Mail taken. Please select another")
}
方法将对象单独加载到上下文中。
答案 1 :(得分:1)
来自apple的managedObjectContext - executeFetchRequest方法讨论: -
满足请求指定的条件的对象(它是请求指定的实体的实例,如果有请求,它与请求的谓词匹配)并且已插入到上下文但尚未保存的上下文中如果在该上下文上执行获取请求,则检索持久存储。'
这意味着获取请求总是从持久性存储发生,并且如果在context-1中存在一些数据(在并发执行核心数据的情况下可能存在多个托管对象上下文),则不会将其保存到持久性存储中(即在没有调用context.save的情况下,在获取数据时,仅当在上下文1中调用了执行获取请求时,这些数据(未保存)才会与持久存储中的数据一起获取。在任何上下文上执行fetch都会带来这些数据。