当用户基于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中的第一个项目) - 非常感谢任何建议!
由于
答案 0 :(得分:6)
你试过了吗?
[itemToUpdate setValue:[NSNumber numberWithBool:NO] forKey:@"purchased"]
形式?
我总是将NSManagedObject子类化,点符号适用于声明的属性。但你可以试试这个“较旧”的符号,看看是否有效。
答案 1 :(得分:0)
我想你创建了一个'NSManagedObject'的自定义子类,其中'purchase'作为其中一个属性。声明'itemToUpdate'作为此子类的对象,而不是NSManagedObject:
YourCustomSubclassOfNSManagedObject *itemToUpdate = [groceryArray objectAtIndex:indexPath.row];