ios - 如何使用 NSRange 创建 NSArray 的子数组?

标签 ios objective-c nsarray nsrange arrays

我有一个包含内容的数组。像往常一样,它包含 20 个对象。我想在 Tableview 中将同一个数组分成两部分。 我正在尝试在当前数组中使用 NSMake 来实现它。例如,我需要进入第一个 tableview 部分 3 行,第二个将包含所有其余部分(17 行)。

switch (section) {
        case 0:
            return
            [[array subarrayWithRange:NSMakeRange(3, 8)] count];
            // in this line, it always takes from the first object in array, despite I told hime start from 3 (If I understand right, how to works NSMakeRange)
            break;
        case 1:
            return
            [[array subarrayWithRange:NSMakeRange(9, 19)] count];
            // here my app is crashing with an error 
            //*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSArray subarrayWithRange:]: range {9, 19} extends beyond bounds [0 .. 19]'
        default:
            break;
    }

有人可以帮我吗?

最佳答案

NSMakeRange 被定义为 (startingIndex, length),而不是 (start, end) 这看起来像是您尝试使用的方式

因此,如果您需要前 3 个对象,那么其余的对象将如下所示:

switch (section) {
    case 0:
        // This returns objects 0-2 in the array
        return [array subarrayWithRange:NSMakeRange(0, 3)];
    case 1:
        // This returns objects 3-20 in the array
        return [array subarrayWithRange:NSMakeRange(3, 17)];
    default:
        break;
}

编辑:根据您的评论,您实际上是在寻找要返回的部分中行数的计数。由于您使用的是固定行数,因此您可以在 case 语句中返回实际行数。

switch (section) {
    case 0:
        // This returns the count for objects 0-2 in the array
        return 3;
    case 1:
        // This returns the count for objects 3-20 in the array
        return 17;
    default:
        break;
}

您实际上不需要使用[subarrayWithRange],也不需要使用NSMakeRange。如果你确实需要在某个时候引用实际的数组,你将得到一个 NSIndexPath 对象,你可以使用它从你的数组中获取对象。您将需要使用 section 和 row 属性。

编辑:NSRange -> NSMakeRange

关于ios - 如何使用 NSRange 创建 NSArray 的子数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19597034/

相关文章:

objective-c - 使用没有 View Controller 的 NIB 文件创建自定义 UIVIew

objective-c - 当 NSArray 元素被释放时会发生什么?

objective-c - 仪器(分配)并找出哪些对象会产生问题

ios - 如何实现 GKTurnBasedMatchOutcomeCustomRange?

ios - 按下时突出显示的UIButton不会在第一次按下时突出显示

ios - 如何在 NSMutableArray 中对对象进行分组并在 Objective-C 中划分为单独的 NSMutableArray

objective-c - 如何在指定索引处返回 NSArray 中的对象?

ios - 如何将 NSManagedObject 转换为 NSDictionary

ios - 如何在 XIB 中调用 UITextField 的委托(delegate)方法?

ios - 如果 Watch 应用程序在 iPhone 应用程序运行之前打开,则不会填充任何数据