【问题标题】:Initializing multidimensional NSArray for iPhone devel为 iPhone 开发初始化多维 NSArray
【发布时间】:2011-04-15 03:23:22
【问题描述】:

我开始做 iPhone 开发,我需要使用多维数组。

我使用以下方法对其进行初始化:

NSArray *multi=[NSArray 
  arrayWithObjects:[NSMutableArray arrayWithCapacity:13],
  [NSMutableArray array],nil];

但是当我尝试像这样为第 n 个单元格赋值时:

[[multi objectAtIndex:4] addObject:@"val"];

应用程序挂起,因为索引 4 超出界限 [0 .. 1]

初始化多数组的正确方法是什么?提前致谢和问候。

【问题讨论】:

    标签: iphone objective-c memory-management multidimensional-array nsarray


    【解决方案1】:

    我猜你想创建一个 NSMutableArrays 的 NSMutableArray:

    NSMutableArray *multi = [NSMutableArray arrayWithCapacity: 13];
    for (int i = 0; i != 13; i++)
    {
        NSMutableArray *array = [NSMutableArray arrayWithCapacity: 10];
        [multi insertObject: array atIndex: 0];
    }
    

    之后,你的调用就有效了。

    编辑:作为旁注,容量!= 计数,如果您知道这些,则在 .NET 或 C++ 的 STL 中也是如此。

    【讨论】:

      【解决方案2】:

      您所做的是创建一个包含两个对象的数组:另外两个数组。您实际上是在请求这个“超级数组”中的第 5 个对象,因为没有,所以它不起作用。

      顺便说一句,即使你创建了一个指定容量的数组,它仍然是空的。指定容量只是为数组分配足够的内存以至少容纳给定数量的对象。如果你不添加任何对象,如果你请求第 10 个对象,它仍然会让你的应用崩溃。

      【讨论】:

        猜你喜欢
        • 2012-02-29
        • 1970-01-01
        • 1970-01-01
        • 2015-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多