我希望遍历NSManagedObjectContext中的所有对象,并手动更新它们。然后,应该更新每个托管对象。做这件事最好的方法是什么?
发布于 2010-04-29 00:32:51
从理论上讲,您可以遍历托管对象模型中的所有实体描述,为它们构建一个无谓词获取请求,然后循环所有返回的对象并执行一些更新。示例:
// 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:或相关方法),或者确定当前实体是什么类(将entity上的managedObjectClassName属性与NSClassWithName()方法结合使用)。
发布于 2010-04-29 02:03:51
这似乎是一种非常严厉的方法来解决这个问题。如果数据加载了坏数据,那么我强烈建议在导入数据时修复它。强烈建议您在导入数据时修复它。Tim的答案将适用于您正在做的事情,但我强烈怀疑您在这一点上是错误的。遍历整个数据库,寻找潜在的坏数据是非常低效的。
发布于 2011-07-26 00:30:02
如果被管理的对象是用“错误的数据”创建的,我会检查以确保你在你的模型中为所有实体的所有属性设置了默认值。这样,您就可以确保无论何时将对象插入到上下文中,它都将包含这些值。从那里,您可以将属性设置为所需的任何内容。
https://stackoverflow.com/questions/2731276
复制相似问题