通过NSManagedObjectContext对象迭代?

时间:2010-04-28 16:18:02

标签: cocoa core-data nsmanagedobjectcontext

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

3 个答案:

答案 0 :(得分: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
    }
}

注意,您可以通过测试类相等性(使用isKindOfClass:或相关方法)或通过确定当前实体的类(使用managedObjectClassName属性)来强制转换NSManagedObjects。 entityNSClassWithName()方法结合使用。{/ p>

答案 1 :(得分:4)

这似乎是一个非常严厉的方法来处理这个问题。如果数据加载了错误的数据,那么我会强烈建议在导入数据时修复它。蒂姆的回答对你正在做的事情有用,但我强烈怀疑你是出现了这个错误。遍历整个数据库寻找潜在的不良数据是非常低效的。

答案 2 :(得分:0)

如果使用“错误数据”创建托管对象,我会检查以确保您在模型中为所有实体的所有属性设置默认值。这样,您可以确定无论何时将对象插入上下文,它都将包含这些值。从那里,您可以将属性设置为您需要的任何属性。