通过NSManagedObjectContext对象迭代?

cac*_*tus 4 cocoa core-data nsmanagedobjectcontext

我想遍历NSManagedObjectContext中的所有对象,并手动更新它们.然后,应更新每个托管对象.最好的方法是什么?

Tim*_*Tim 5

从理论上讲,您可以遍历托管对象模型中的所有实体描述,为它们构建无谓词提取请求,然后遍历所有返回的对象并进行一些更新.例:

// Given some NSManagedObjectContext *context
NSManagedObjectModel *model = [[context persistentStoreCoordinator]
                               managedObjectModel];
for(NSEntityDescription *entity in [model entities]) {
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
    [request setEntity:entity];
    NSError *error;
    NSArray *results = [context executeFetchRequest:request error:&error];
    // Error-checking here...
    for(NSManagedObject *object in results) {
        // Do your updates here
    }
}
Run Code Online (Sandbox Code Playgroud)

注意,您可以通过测试类相等性(使用isKindOfClass:或相关方法)或通过确定当前实体的类(使用managedObjectClassName属性on entityNSClassWithName()方法一起使用)来转换必要时返回的NSManagedObjects .