使用NSUserDefaults保存静态Tableview单元格检查标记

时间:2013-11-03 21:16:32

标签: ios objective-c uitableview nsuserdefaults

** iOS开发和编程新手。耐心,请。

我到处寻找可以理解和实现的东西,这样我就可以保存并检索静态tableview单元格的复选标记。

我试过了:
saving checkmark accessory value in nsuserdefaults and then retreving them
how to save the state in userdefaults of accessory checkmark-iphone
和无数其他人。

可能是我缺乏导致问题的知识。

我有一个静态单元格的tableview。根据Apple的说明,我已经实现了多选的复选标记,如下所示:

- (void)tableView:(UITableView *)theTableView
didSelectRowAtIndexPath:(NSIndexPath *)newIndexPath {

    [theTableView deselectRowAtIndexPath:[theTableView indexPathForSelectedRow] animated:NO];
    UITableViewCell *cell = [theTableView cellForRowAtIndexPath:newIndexPath];
    if (cell.accessoryType == UITableViewCellAccessoryNone) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;

    } else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
        cell.accessoryType = UITableViewCellAccessoryNone;

    }
}

这适用于选择和取消选择多行,然后显示复选标记。

如何将这些复选标记保存到用户默认值,以便每次为该表视图重新加载?

当我尝试为NSUserDefaults设置对象时,我收到一条错误,上面写着“NS不允许将NSInteger隐式转换为'id'”和“将不兼容的整数转换为指针转换,将NSInteger发送到'id'的参数类型”

任何帮助都非常感谢,即使它只是指向一个新手可以理解的资源。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你可能会从错误的方向接近这一点。您的表视图是数据驱动的,因此您应该修改数据,而不是视图,以响应单元格选择。然后,您可以通过[tableView reloadData]更新您的观看次数 或者使用reloadRowsAtIndexPaths:withRowAnimation:进行更细粒度的控制(即一次修改一个)。我们的想法是您更新基础数据,并导致iOS在cellForRowAtIndexPath:中更新您根据该数据配置的单元格。

答案 1 :(得分:1)

一般情况下,您应该寻找修改表视图所代表的基础数据,然后坚持这一点,而不是修改和保持表视图的数据表示状态。

但是,如果没有明确的方法,那么要修复当前错误,您必须记住NSUserDefaults只存储对象,而不是基本类型。因此,要使用NSNumber将整数表达式转换为@(...expr...)框,然后通过调用NSUserDefaults方法获取从integerValue检索的对象的整数值它。但是,您没有显示任何实际导致错误的代码,因此我可以评论。