存储在数组中的索引路径表现不同

Posted

技术标签:

【中文标题】存储在数组中的索引路径表现不同【英文标题】:Indexpath stored in array behaves differently 【发布时间】:2014-07-08 05:25:53 【问题描述】:

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

【问题讨论】:

阅读 containsObject: 方法的文档。将对象与对isEqual: 的调用进行比较。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

或者

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

希望对您有所帮助。

【讨论】:

以上是关于存储在数组中的索引路径表现不同的主要内容,如果未能解决你的问题,请参考以下文章

如何将整个索引路径、上一个、上一个和当前选定的索引路径值存储到 didSelectRowAtIndexPath 中的 NSArray:方法

在不同“路径”上具有相同名称的firestore集合的索引

如何根据uitableview中的部分获取索引路径?

将对象表索引路径设置为对象属性?

`dropSessionDidUpdate` 中的 UICollectionViewDropDelegate 错误的目标索引路径

我似乎无法访问存储在数组位置 0 和 1 中的值