关键问题的xcode核心数据编辑值

时间:2013-10-29 23:08:36

标签: objective-c xcode core-data

这里有问题......

我的BOOL被编辑,我在最后一个NSLog上获得了成功,但当我关闭ViewController然后再次进入(更新表)时,BOOL返回到第一个值。那会说 - 我的[上下文保存:& error]出了点问题;功能。 有什么想法吗?

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

for (int i=0; i<[self tableView:tableView numberOfRowsInSection:0]; i++) {

    AccountCell *cell = (AccountCell *)[tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
    [cell setSelected:(i==indexPath.row) animated:NO];
    NSManagedObject *user = [arr objectAtIndex:indexPath.row];
    [user setValue:[NSNumber numberWithBool:(i==indexPath.row)] forKey:@"active"];
    NSLog(@"Index: %i, Active State: %@", i,[user valueForKey:@"active"]);
    NSError *error;

    if (![context save:&error]) {
        NSLog(@"Saving changes to context failed: %@", error);
    } else {
        // The changes have been persisted.
        NSLog(@"Saved data success");
    }
}
}

1 个答案:

答案 0 :(得分:0)

一些建议:

将save语句放在for循环之外会更有意义。

您需要检查是否

  • 您的托管对象上下文有效(非零)
  • 神秘arr数组对象的上下文与您保存的上下文相同
  • 在您的模型和托管对象中正确配置了“活动”属性(包括拼写)(可能您希望子类化以获得更清晰,而不是依赖于KVC)。
  • 错误变量
  • 中有一些内容

我也认为还有其他一些设计缺陷。例如,您正在获取单元格并设置其选定状态,即使它们甚至可能不可见。 IMO,您应该在cellForRowAtIndexPath中根据底层托管对象的状态执行此操作。

至于取消选择同一部分中的所有其他用户,你认为循环可能是不可避免的。但我认为一次获取​​一个部分中的所有用户然后循环它们以根据需要设置“活动”属性会更有效。