【问题标题】:Putting objects from one NSMutableArray to another NSMutableArray将对象从一个 NSMutableArray 放到另一个 NSMutableArray
【发布时间】:2013-01-31 19:28:55
【问题描述】:

我有 2 个 NSMutableArrays,我想将某个对象从 1 数组放到我已经编写过代码的另一个数组中,但它不起作用,它给了我这个错误: * 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayM objectAtIndex:]: index 296 beyond bounds [0 .. 295]” * 首先抛出调用栈: (0x1c9a012 0x10d7e7e 0x1c3c0b4 0x2f04 0xb20b90 0x1c59376 0x1c58e06 0x1c40a82 0x1c3ff44 0x1c3fe1b 0x1bf47e3 0x1bf4668 0x1f65c 5x2) libc++abi.dylib:终止调用抛出异常

在 viewdidload 中初始化:

arrayLine1 =[[NSMutableArray alloc] initWithCapacity:80000];
    arrayLine1a =[[NSMutableArray alloc] initWithCapacity:70000];
    line1tagzahl=0;
    line1tagzahl2=0;

通过代码:

for (int a=0; a<10; ) {

            [arrayLine1a insertObject:[arrayLine1 objectAtIndex:line1tagzahl2] atIndex:line1tagzahl2];

            line1tagzahl2=line1tagzahl2+1;
            a=a+1;
        }

在数组中创建对象的函数(此函数调用非常快且频繁):

for (float a=0; a<0.8; ) {
            UIImageView *line1 =[[UIImageView alloc] initWithFrame:CGRectMake(Startpoint1.center.x-(w/2),Startpoint1.center.y-kurve1yf+a,w,h)];
            line1.image=[UIImage imageNamed:@"Unbenannt"];
            line1.tag=line1tagzahl;
            [self.view addSubview:line1];
            [arrayLine1 insertObject:line1 atIndex:line1tagzahl];
            line1tagzahl=line1tagzahl+1;
            a=a+0.1;
        }

现在您应该了解更多信息

【问题讨论】:

  • 您的最终目标到底是什么?正如下面其他人评论的那样,只需将一个数组复制到另一个数组就可以使用“复制”来完成,但可能是您没有共享您实际尝试实现的某些重要部分?
  • 这段代码中的索引是 296 的结果如何?
  • 可能是因为array2里面有很多对象,并且很可能当上面的功能初始化时,里面的对象是296
  • 请看this解决方案

标签: iphone objective-c nsmutablearray


【解决方案1】:

如果你问我在 array2 中有超过 10 个对象

您似乎还没有阅读您发布的错误消息。数组中有 296 个对象。但是如果你只是想复制数组,为什么不……呃……复制呢?

NSMutableArray *secondArray = [firstArray mutableCopy];

【讨论】:

  • 因为我只需要数组中的某些对象,这些是 uiimageviews,我想与其他数组中的对象相交,而与其他数组不相交,奇怪的是我的容量超过 1000
  • @killerwakka 似乎您应该使用集合而不是数组。
【解决方案2】:

使用 NSMutableArray 类的默认方法-addObjectsFromArray: 有什么问题吗?

- (void)serverGotResponse:(NSArray *)objects {
  [_myMutableArray addObjectsFromArray:objects];
}

【讨论】:

    【解决方案3】:

    为了防止越界异常,你应该使用count属性:

    while (i < array.count) {
       // do something ..
       i++;
    }
    

    如果要复制所有对象,则可以复制整个数组:
    array2 = [array1 copy]

    【讨论】:

      【解决方案4】:

      您正在尝试添加前 10 个对象,但在索引 296 上引发了异常,这是第一个超出范围的索引。

      由于某种原因,您的while 条件无法正常工作,所以我建议您开始查看那里

      我还建议你使用for,它实际上比潜在的无限循环更简单直接

      for (int a = 0; a < 10; a++) {
          [array1 insertObject:[array2 objectAtIndex:a] atIndex:a];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-20
        • 1970-01-01
        相关资源
        最近更新 更多