更新/编辑coreData托管对象

时间:2010-12-03 07:29:01

标签: core-data ios

当用户基于cell.accessoryType单击UITableView中的单元格以显示是否已单击该项目时,我正在尝试编辑CoreData对象。这是当前的代码。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

NSManagedObject *itemToUpdate = [groceryArray objectAtIndex:indexPath.row];
NSLog(@"updating: %@", itemToUpdate);

if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
    cell.accessoryType = UITableViewCellAccessoryNone;
    itemToUpdate.purchased = NO;
}else {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    itemToUpdate.purchased = YES;
}

// Commit the change.
NSError *error;
if (![managedObjectContext save:&error]) {
    // Handle the error.
    NSLog(@"Saving changes failed: %@", error);

}
}

似乎正在选择正确的对象,因为NSLog()将显示正确的项目,但是当我尝试使用点符号进行更新时,例如“itemToUpdate.purchased = YES;”编译器抛出错误“请求成员'购买'的东西不是结构或联合”。

我知道我可能做错了(我在xcode中的第一个项目) - 非常感谢任何建议!

由于

2 个答案:

答案 0 :(得分:6)

你试过了吗?

[itemToUpdate setValue:[NSNumber numberWithBool:NO] forKey:@"purchased"]

形式?

我总是将NSManagedObject子类化,点符号适用于声明的属性。但你可以试试这个“较旧”的符号,看看是否有效。

答案 1 :(得分:0)

我想你创建了一个'NSManagedObject'的自定义子类,其中'purchase'作为其中一个属性。声明'itemToUpdate'作为此子类的对象,而不是NSManagedObject:

YourCustomSubclassOfNSManagedObject *itemToUpdate = [groceryArray objectAtIndex:indexPath.row];