** 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'的参数类型”
任何帮助都非常感谢,即使它只是指向一个新手可以理解的资源。
谢谢!
答案 0 :(得分:1)
我认为你可能会从错误的方向接近这一点。您的表视图是数据驱动的,因此您应该修改数据,而不是视图,以响应单元格选择。然后,您可以通过[tableView reloadData]
更新您的观看次数
或者使用reloadRowsAtIndexPaths:withRowAnimation:
进行更细粒度的控制(即一次修改一个)。我们的想法是您更新基础数据,并导致iOS在cellForRowAtIndexPath:
中更新您根据该数据配置的单元格。
答案 1 :(得分:1)
一般情况下,您应该寻找修改表视图所代表的基础数据,然后坚持这一点,而不是修改和保持表视图的数据表示状态。
但是,如果没有明确的方法,那么要修复当前错误,您必须记住NSUserDefaults
只存储对象,而不是基本类型。因此,要使用NSNumber
将整数表达式转换为@(...expr...)
框,然后通过调用NSUserDefaults
方法获取从integerValue
检索的对象的整数值它。但是,您没有显示任何实际导致错误的代码,因此我可以评论。