0

这里有问题...

我的 BOOL 被编辑并且我在最后一个 NSLog 中获得了成功,但是当我关闭 ViewController 然后再次进入(更新表)时,BOOL 回到第一个值。那会说 - 我的 [context save:&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");
    }
}
}
4

1 回答 1

0

一些建议:

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

你需要检查是否

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

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

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

于 2013-10-30T09:44:33.710 回答