2

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

我到处寻找我可以理解和实现的东西,这些东西可以让我保存和检索静态表格视图单元格的复选标记。

我尝试过:
在 nsuserdefaults 中保存复选标记附件值,然后检索它们
如何在附件复选标记 iPhone
和无数其他的用户默认值中保存状态。

可能是我缺乏知识导致了这些问题。

我有一个带有静态单元格的表格视图。根据 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;

    }
}

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

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

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

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

谢谢!

4

2 回答 2

1

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

于 2013-11-03T22:34:26.983 回答
1

通常,您应该修改由表视图表示的基础数据,然后将其持久化,而不是修改和持久化表视图的数据表示状态。

但是,如果没有明确的方法来做到这一点,那么要修复您当前的错误,您必须记住NSUserDefaults只存储对象,而不是原始类型。因此,要将整数表达式转换为带有 的NSNumber@(...expr...),然后NSUserDefaults通过调用其integerValue上的方法来获取您从中检索的对象的整数值。但是,您没有显示任何实际导致错误的代码,因此我只能发表评论。

于 2013-11-03T23:15:27.187 回答