更新/编辑 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 托管对象的主要内容,如果未能解决你的问题,请参考以下文章

更新当前的 CoreData 条目

CoreData 合并冲突显示托管对象版本更改而不是数据

如何更灵活的处理 CloudKit 从云端同步到本地的 CoreData 托管对象

如何更灵活的处理 CloudKit 从云端同步到本地的 CoreData 托管对象

识别 iCloud coreData 更新:良好实践

了解在“便签本”中创建和更新的 CoreData 实体