存储在数组中的Indexpath行为不同

时间:2014-07-08 05:25:54

标签: ios cocoa-touch nsarray nsindexpath

我试图为某些目的存储选定的索引路径。我在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 。 但仍然条件成功。有人可以解释一下这是如何工作的。提前致谢。

2 个答案:

答案 0 :(得分:1)

数组中不存在实例0x91a8460,但路径0-0是。 containsObject:的比较由isEqual执行,而不是由对象标识执行。如果您想要进行对象 - 身份比较,请使用indexOfObjectIdenticalTo:

答案 1 :(得分:1)

在我看来,将indexPath(s)存储在数组中然后用它来更新表格单元格并不理想。最好使用字典数组,其中包含所有表格数据,然后您可以添加isCheck之类的密钥,并在用户操作后设置TRUEFALSE

或者

你仍然可以拥有你的数组,但不是存储索引路径,而是更好地创建像(@"%d%d",indexpath.row, indexpath.section)这样的字符串组合,并用它来进行字符串比较。

希望有所帮助。