0

我已经开始使用 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(请参阅 gainPermanentIDsForObjects)

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

4

1 回答 1

2

它是为同一个对象创建一个新实例,还是每次在内部创建一个新对象?

newObjectIDForEntity:referenceObject:是用于在存储的托管对象快照的内部表示和 NSManagedObjectID 之间进行映射的两种实用方法之一。它的倒数是referenceObjectForObjectID:。正如您可能从名称中猜到的那样,它newObjectIDForEntity:referenceObject:返回一个被认为保留计数为 1 的对象。newObjectIDForEntity:referenceObject:调用一个内部工厂方法来生成一个 NSManagedObjectID,该 NSManagedObjectID 对该持久存储中的该引用对象是唯一的。完成后,referenceObjectForObjectID:可以查找该 NSManagedObjectID 并返回它所代表的引用对象。

我的意思是:如果我创建一个新的托管对象然后获取该对象,我将为同一个对象调用两次“newObjectIDForEntity”。核心数据现在认为有 1 或 2 个对象吗?

我假设您的意思是使用您的商店的 NSManagedObjectContext 创建托管对象。你可以调用任意newObjectIDForEntity:referenceObject:多次,NSManagedObjectID 实例可能不同,但它所代表的数据是不变的。它将知道它指向与先前调用相同的引用对象,具有相同的引用数据和实体描述。

于 2014-09-24T03:15:58.167 回答