我已经开始使用NSIncrementalStore了。处理提取请求时,首先必须处理谓词以获取内部引用对象。然后将这些转换为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"也用于获取永久对象ID(参见obtainPermanentIDsForObjects)
我想知道" newObjectIDForEntity"确实。它是为同一个对象创建一个新实例,还是每次在内部创建一个新对象时都这样做?我的意思是:如果我创建一个新的托管对象,然后获取该对象,我将调用" newObjectIDForEntity"两次为同一个对象。核心数据现在认为有1个或2个对象吗?
答案 0 :(得分:2)
newObjectIDForEntity:referenceObject:
是用于在商店的托管对象快照和NSManagedObjectID的内部表示之间进行映射的两种实用方法之一。它的反向是referenceObjectForObjectID:
。正如您可能从名称中猜到的那样,newObjectIDForEntity:referenceObject:
返回一个被认为具有保留计数为1的对象。newObjectIDForEntity:referenceObject:
调用内部工厂方法来生成此持久性存储中该引用对象唯一的NSManagedObjectID 。完成后,referenceObjectForObjectID:
可以查找NSManagedObjectID并返回它所代表的引用对象。
我假设您的意思是使用您的商店的NSManagedObjectContext创建托管对象。您可以根据需要多次调用newObjectIDForEntity:referenceObject:
,NSManagedObjectID实例可能不同,但它所代表的数据不变。它将知道它指向与具有相同参考数据和实体描述的早期调用相同的引用对象。