更新/编辑 coreData 托管对象
Posted
技术标签:
【中文标题】更新/编辑 coreData 托管对象【英文标题】:Update/Edit coreData managed object 【发布时间】:2010-12-03 07:29:01 【问题描述】:当用户单击基于 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 中的第一个项目) - 任何建议都将不胜感激!
谢谢
【问题讨论】:
【参考方案1】:你试过了吗:
[itemToUpdate setValue:[NSNumber numberWithBool:NO] forKey:@"purchased"]
表格?
我总是继承 NSManagedObject 并且点符号适用于声明的属性。但您可以尝试这种“旧”表示法,看看是否可行。
【讨论】:
谢谢!那行得通...我有很多阅读要做。感谢您的时间和帮助。 :)【参考方案2】:我想您创建了一个自定义子类 'NSManagedObject' ,其中 'purchased' 作为属性之一。将 'itemToUpdate' 声明为该子类的对象,而不是 NSManagedObject:
YourCustomSubclassOfNSManagedObject *itemToUpdate = [groceryArray objectAtIndex:indexPath.row];
【讨论】:
以上是关于更新/编辑 coreData 托管对象的主要内容,如果未能解决你的问题,请参考以下文章
如何更灵活的处理 CloudKit 从云端同步到本地的 CoreData 托管对象