ros*_*400 1 xcode core-data ios5
我正在尝试使用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]);
}
Run Code Online (Sandbox Code Playgroud)
导致错误的行是:
contact.sync_status = @"Y";
Run Code Online (Sandbox Code Playgroud)
错误是*由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [NSKnownKeysDictionary1 setSync_status:]:无法识别的选择器发送到实例0x8907fd0'*第一次抛出调用堆栈:
Contact是我在Xcode中自动生成的NSManagedObject类.
我的方法在这里不正确吗?我在检索或删除记录方面没有任何问题,但我对如何更新数据感到磕磕绊绊.
任何指导或帮助将不胜感激.谢谢.
jrt*_*ton 10
您已将fetch请求配置为返回字典而不是托管对象.如果要更新返回的对象,则必须在获取请求中询问它们 - 也就是说,使用默认行为而不是您正在执行的操作.
删除这些行:
[request setResultType:NSDictionaryResultType];
[request setPropertiesToFetch:[NSArray arrayWithObjects:@"first_name",@"sync_status",nil]];
Run Code Online (Sandbox Code Playgroud)
你会没事的.如果您只想在fetch中返回某些属性,但是您想要整个对象,则使用上面的行.
归档时间: |
|
查看次数: |
1873 次 |
最近记录: |