存储在数组中的索引路径表现不同
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
之类的键,并在用户操作后将其设置为 TRUE
或 FALSE
。
或者
你仍然可以拥有你的数组,但最好不要存储索引路径,而是创建一个像(@"%d%d",indexpath.row, indexpath.section)
这样的字符串组合,并用它来比较字符串。
希望对您有所帮助。
【讨论】:
以上是关于存储在数组中的索引路径表现不同的主要内容,如果未能解决你的问题,请参考以下文章
如何将整个索引路径、上一个、上一个和当前选定的索引路径值存储到 didSelectRowAtIndexPath 中的 NSArray:方法
`dropSessionDidUpdate` 中的 UICollectionViewDropDelegate 错误的目标索引路径