4

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

4

3 回答 3

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
    }
}

请注意,您可以根据需要转换返回的 NSManagedObjects,方法是测试类相等性(使用isKindOfClass:或相关方法)或确定当前实体是什么类(结合方法使用managedObjectClassNameon 属性)。entityNSClassWithName()

于 2010-04-28T16:32:51.020 回答
4

这似乎是解决问题的一种非常严厉的方法。如果数据加载了不良数据,那么我强烈建议您在导入数据时对其进行修复。蒂姆的回答将适用于你正在做的事情,但我强烈怀疑你是错的。遍历整个数据库以寻找潜在的不良数据是非常低效的。

于 2010-04-28T18:03:50.920 回答
0

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

于 2011-07-25T16:30:02.013 回答