【问题标题】: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: 的调用进行比较。

标签: ios cocoa-touch nsarray nsindexpath


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    或者

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

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 2015-02-14
      • 2017-05-03
      相关资源
      最近更新 更多