我已经开始使用NSIncrementalStore了。在处理fetch请求时,首先必须处理谓词以获取内部引用对象。然后将它们转换为objectID,然后请求上下文获取相应的managedObjects。至少这是我对现有文档的解释。
let fetchedReferences : [Int] = Array(names.keys) //names represent my backingstore
var fetchedObjectIDs : [NSManagedObjectID] = []
for reference in fetchedReferences
{
fetchedObjectIDs.append(self.newObjectIDForEntity(request.entity, referenceObject: reference))
}
var fetchedObjects : [NSManagedObject] = []
for objectID in fetchedObjectIDs
{
fetchedObjects.append(context.objectWithID(objectID))
}"newObjectIDForEntity“也用于获取永久的objectID(参见obtainPermanentIDsForObjects)
我想知道"newObjectIDForEntity“是做什么的。它是为同一对象创建一个新实例,还是每次在内部创建一个新对象?我的意思是:如果我创建一个新的托管对象,然后获取该对象,我将为同一对象调用两次"newObjectIDForEntity“。核心数据现在是否认为有1个或2个对象?
发布于 2014-09-24 11:15:58
它是为同一对象创建一个新实例,还是每次在内部创建一个新对象?
newObjectIDForEntity:referenceObject:是用于在存储的托管对象快照的内部表示形式和NSManagedObjectID之间进行映射的两种实用程序方法之一。与之相反的是referenceObjectForObjectID:。从名称中您可能会猜到,newObjectIDForEntity:referenceObject:返回一个被认为保留计数为1的对象。newObjectIDForEntity:referenceObject:调用一个内部工厂方法来生成一个NSManagedObjectID,该for对于这个持久存储中的引用对象是唯一的。完成此操作后,referenceObjectForObjectID:可以查找该NSManagedObjectID并返回它所表示的引用对象。
我的意思是:如果我创建一个新的托管对象,然后获取该对象,我将为同一对象调用两次"newObjectIDForEntity“。核心数据现在是否认为有1个或2个对象?
我假设您的意思是使用您的存储区的NSManagedObjectContext创建托管对象。您可以根据需要多次调用newObjectIDForEntity:referenceObject:,NSManagedObjectID实例可能不同,但它表示的数据是不变的。它将知道它指向与具有相同引用数据和实体描述的早期调用相同的引用对象。
https://stackoverflow.com/questions/25991714
复制相似问题