【问题标题】:NSIndexPath getIndexes method....how?NSIndexPath getIndexes 方法....怎么样?
【发布时间】:2011-03-11 11:14:55
【问题描述】:

我对这种方法的使用以及将其列为(void)方法的文档感到困惑。

"返回索引路径的索引"

它也在哪里返回任何东西?

不应该是:

- (NSIndexPath *)getIndexes:(NSUInteger *)indexes

获取索引: 提供对索引路径的索引的引用。

- (void)getIndexes:(NSUInteger *)indexes

参数 索引 指向无符号整数数组的指针。返回时,索引路径的索引。 可用性 在 iOS 2.0 及更高版本中可用。 宣布于 NSIndexPath.h

【问题讨论】:

    标签: iphone nsindexpath


    【解决方案1】:

    您必须分配大小为 [indexPath length] 的 NSUInteger 数组并将其作为参数传递。返回值将写入那里。您必须自己释放该数组,或者像这样在堆栈上创建它不执行任何操作:

    NSUInteger array[[indexPath length]];
    [indexPath getIndexes: array];
    

    【讨论】:

    • 感谢大家的出色回答!我现在明白了,谢谢。我选择了 Max 的解决方案答案,尽管这三个都是有效的
    • 在这里输掉剧情? NSUInteger 数组[[indexPath 长度]]; [indexPath getIndexes: 数组]; int len = sizeof(array)/sizeof(NSUInteger); NSLog(@"%i",len);无论我在给定部分中有多少行,我得到的 len 都是 2 ?
    • 索引路径不存储行数。它用于有效地访问单元格。您需要为此使用 [tableView numberOfRowsInSection]
    • 是的,有两个索引:一个用于节,一个用于行。如果行可以细分,可能会有三个或更多索引,但现在只有部分和行。
    • 说表格有 3 个部分,中间部分有 8 行,用户点击了中间部分的任何行,我认为 getIndexes 将返回一个包含 8 个 NSUInteger 的数组,我可以使用循环访问该给定部分中的每个单元格?
    【解决方案2】:

    也许下一句解释了原因

    为 C 数组分配内存是开发人员的责任。

    它实际上是一个指向 C 数组的指针,它将为您填充索引,因此没有理由从函数中额外返回它 - 您已经知道它的地址。

    可以如下使用函数

    NSUInteger indexCount = [indices count];
    NSUInteger buffer[indexCount];
    [indices getIndexes:buffer maxCount:indexCount inIndexRange:nil];
    

    【讨论】:

    【解决方案3】:

    您将该消息发送到 NSIndexPath 的一个实例,因此返回一个也无济于事。 -getIndexes: 方法用索引路径中的索引填充数组'indexes'。所以你会做这样的事情:

    NSUInteger *indexes = calloc([indexPath length], sizeof(NSUInteger));
    [indexPath getIndexes:indexes];
    

    之后,索引将被 indexPath 中的索引值填充。

    【讨论】:

      【解决方案4】:

      Max、Thomas 和 Caleb,我已经尝试了所有三种方法,但无法让任何东西发挥作用,所以可能太快地放弃了接受的解决方案......但很可能我只是不明白?我无法获得正确大小的数组以循环遍历它以访问表中所需的行。我会认为calloc([indexPath length], sizeof(NSUInteger)) 会为一个有 5 行的组返回一个有 5 行的数组,每行包含NSUIntegr..... 或者我离梁太远了尴尬吗?

      【讨论】:

      • 一个索引路径只指定一个节和一个行,而不是表中的所有行。您的表的数据源和委托共同为表提供行,因此您应该已经知道有多少行并且可以访问它们的所有数据。
      猜你喜欢
      • 2016-05-19
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2020-06-18
      • 2022-01-10
      • 2011-09-22
      相关资源
      最近更新 更多