【发布时间】:2012-03-23 07:49:14
【问题描述】:
我正在尝试使用 CoreData 更新数据库中的现有记录,但在使用托管对象访问器方法时出现异常。
代码摘录:
NSManagedObjectContext *tmpManagedObjectContext = [self.fetchedResultsController managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:tmpManagedObjectContext];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"contact_id = %@", [dict objectForKey:@"contact_id"]];
[request setPredicate:predicate];
NSError *error = nil;
[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:[NSArray arrayWithObjects:@"first_name",@"sync_status",nil]];
Contact *contact = [[managedObjectContext executeFetchRequest:request error:&error] objectAtIndex:0];
contact.sync_status = @"Y";
error = nil;
if (![tmpManagedObjectContext save:&error]) {
NSLog(@"Error setting sync status on contact record - error: %@", [error localizedDescription]);
}
导致错误的行是:
contact.sync_status = @"Y";
错误是 * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSKnownKeysDictionary1 setSync_status:]:无法识别的选择器发送到实例 0x8907fd0” * 首先抛出调用栈:
Contact 是我在 Xcode 中自动生成的 NSManagedObject 类。
我的方法在这里不正确吗?我在检索或删除记录方面没有遇到任何问题,但我对如何更新数据感到困惑。
任何指导或帮助将不胜感激。谢谢。
【问题讨论】:
-
在调试器中查看您的
contact对象,它看起来不是您认为的类型。