我试图为某些目的存储选定的索引路径。我在cellForRowAtIndexpath:
if ([_arrOfIndexPaths containsObject:indexPath]) {
[filterCell setAccessoryType:UITableViewCellAccessoryCheckmark];
[filterCell.textLabel setFont:[UIFont boldSystemFontOfSize:filterCell.textLabel.font.pointSize]];
}
当我尝试打印以下行的描述时,会打印出来。
<__NSArrayM 0x91567d0>(
<NSIndexPath: 0x8e8b5b0> {length = 2, path = 0 - 0},
<NSIndexPath: 0x91559a0> {length = 2, path = 2 - 0}
)
Printing description of indexPath:
<NSIndexPath: 0x91a8460> {length = 2, path = 0 - 0}
如果您看到数组中没有的实例说明 0x91a8460 。 但仍然条件成功。有人可以解释一下这是如何工作的。提前致谢。
答案 0 :(得分:1)
数组中不存在实例0x91a8460
,但路径0-0
是。 containsObject:
的比较由isEqual
执行,而不是由对象标识执行。如果您想要进行对象 - 身份比较,请使用indexOfObjectIdenticalTo:
。
答案 1 :(得分:1)
在我看来,将indexPath
(s)存储在数组中然后用它来更新表格单元格并不理想。最好使用字典数组,其中包含所有表格数据,然后您可以添加isCheck
之类的密钥,并在用户操作后设置TRUE
或FALSE
。
或者
你仍然可以拥有你的数组,但不是存储索引路径,而是更好地创建像(@"%d%d",indexpath.row, indexpath.section)
这样的字符串组合,并用它来进行字符串比较。
希望有所帮助。