这里有问题......
我的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");
}
}
}
答案 0 :(得分:0)
一些建议:
将save语句放在for循环之外会更有意义。
您需要检查是否
arr
数组对象的上下文与您保存的上下文相同我也认为还有其他一些设计缺陷。例如,您正在获取单元格并设置其选定状态,即使它们甚至可能不可见。 IMO,您应该在cellForRowAtIndexPath中根据底层托管对象的状态执行此操作。
至于取消选择同一部分中的所有其他用户,你认为循环可能是不可避免的。但我认为一次获取一个部分中的所有用户然后循环它们以根据需要设置“活动”属性会更有效。