Core data 增量存储中的新对象实体

Core data 增量存储中的新对象实体,core-data,nsincrementalstore,Core Data,Nsincrementalstore,我已经开始使用NSIncrementalStore。处理获取请求时,首先必须处理谓词以获取内部引用对象。然后将它们转换为objectID,然后请求上下文获取相应的managedObjects。至少这是我对现有文档的解释 let fetchedReferences : [Int] = Array(names.keys) //names represent my backingstore var fetchedObjectIDs : [NSManagedObjectID] = [] for ref

我已经开始使用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))
}
“NewObjectedForEntity”还用于获取永久对象ID(请参见获取永久对象)

我想知道“NewObjectedForEntity”是做什么的。它是为同一个对象创建一个新实例,还是每次都在内部创建一个新对象?我的意思是:如果我创建一个新的托管对象,然后获取该对象,我将为同一个对象调用“NewObjectdForEntity”两次。核心数据现在认为有1个还是2个对象

它是为同一个对象创建一个新实例,还是每次都在内部创建一个新对象?
newobjectdforentity:referenceObject:
是两种实用程序方法之一,用于在托管对象快照的存储内部表示与NSManagedObjectID之间进行映射。与之相反的是
referenceObjectForObjectID:
。正如您可能从名称猜到的,
newobjectdforentity:referenceObject:
返回一个被认为保留计数为1的对象
newobjectdforentity:referenceObject:
调用内部工厂方法,以生成此持久存储中引用对象唯一的NSManagedObjectID。完成后,
referenceObjectForObjectID:
可以查找NSManagedObjectd并返回它所表示的引用对象

我的意思是:如果我创建一个新的托管对象,然后获取该对象,我将为同一个对象调用“NewObjectdForEntity”两次。核心数据现在认为有1个还是2个对象?
我假设您是指使用存储创建托管对象的NSManagedObjectContext。您可以根据需要多次调用
newobjectedforentity:referenceObject:
,NSManagedObjectID实例可能不同,但它表示的数据不变。它将知道它指向与先前调用相同的引用对象,具有相同的引用数据和实体描述。

这是“新的”,因为它属于一个方法族,该方法族应该返回一个带有+1保留计数的对象。一般来说,在Objective-C中,应该避免对对象进行直接指针比较,而是使用
isEqual:
。此方法不是每次都返回相同的实例,甚至不是对以前由相同方法返回的对象进行
isEqual
处理。这意味着返回一个表示引用对象的带有retain count+1的
NSManagedObjectID