Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Objective-C-如何在2d NSMutableArray中添加对象_Iphone_Objective C_Arrays_2d_Nsmutablearray - Fatal编程技术网

Iphone Objective-C-如何在2d NSMutableArray中添加对象

Iphone Objective-C-如何在2d NSMutableArray中添加对象,iphone,objective-c,arrays,2d,nsmutablearray,Iphone,Objective C,Arrays,2d,Nsmutablearray,NSMutableArray*insideArray=[[NSMutableArray alloc]init]; NSMutableArray*outsideArray=[[NSMutableArray alloc]init]; [insideArray addObject:@Hello 1]; [insideArray addObject:@Hello 2]; [outsideArray addObject:insideArray]; [insideArray removeAllObjects

NSMutableArray*insideArray=[[NSMutableArray alloc]init]; NSMutableArray*outsideArray=[[NSMutableArray alloc]init]; [insideArray addObject:@Hello 1]; [insideArray addObject:@Hello 2]; [outsideArray addObject:insideArray]; [insideArray removeAllObjects]; [insideArray addObject:@Hello 3]; [insideArray addObject:@Hello 4]; [outsideArray addObject:insideArray]; 电流输出为

    array(
      (
       "Hello 3",
       "Hello 4"
       ),
      (
       "Hello 3",
       "Hello 4"
       )
      )
我需要一种方法来获得输出

    array(
      (
       "Hello 1",
       "Hello 2"
       ),
      (
       "Hello 3",
       "Hello 4"
       )
      )

有没有人能找到解决办法,或者能看出我哪里出了问题?谢谢

我认为问题在于,当您将一个对象添加到数组中时,数组不会复制给定对象,它只保留对它的引用,并将保留计数增加一个

我认为问题在于,当您将一个对象添加到数组中时,数组不会复制给定对象,它只是保存对它的引用,并将保留计数增加一个

好吧,您正在从insideArray中删除Hello 1和Hello 2,这是outsideArray所保存的实际对象。换句话说,outsideArray不知道insideArray的内容

好吧,您正在从insideArray中删除Hello 1和Hello 2,这是outsideArray持有的实际对象。换句话说,outsideArray不知道insideArray的内容

两个子数组使用相同的NSMutableArray。您需要使用两个不同的对象。具体地说,而不是

[insideArray removeAllObjects];
改用

[insideArray release];
insideArray = [NSMutableArray array];

最快的解决方案。

两个子阵列使用相同的NSMutableArray。您需要使用两个不同的对象。具体地说,而不是

[insideArray removeAllObjects];
改用

[insideArray release];
insideArray = [NSMutableArray array];
这是最快的解决方案。

这里实际上只创建了两个数组。您正在创建外部数组,然后向同一内部数组添加两个引用。当您输出它时,您会看到这两个内部数组引用完全相同的内容

您需要在这里创建多个内部数组,因为您希望它们包含不同的值集

这里的关键点是数组只是对象引用,清空和重新填充数组不会创建新的数组;它只是改变了你已经拥有的一个数组。

你实际上只在这里创建了两个数组。您正在创建外部数组,然后向其添加对同一内部数组的两个引用。当您输出它时,您会看到这两个内部数组引用完全相同的内容

您需要在这里创建多个内部数组,因为您希望它们包含不同的值集


这里的关键点是数组只是对象引用,清空和重新填充数组不会创建新的数组;它只会改变你已经拥有的内存。

从内存管理的角度考虑它。每次输入InsiderRay时,计算机都会看到一个引用,即一个内存点。而[outsideArray addObject:insideArray];如果在outsideArray中放置对insideArray对象的引用,insideArray仍然指向内存中的同一位置

尝试实例化一个新对象并将其放置在outsideArray中。更改: [outsideArray addObject:insideArray]

全文如下: [outsideArray addObject:[NSMutableArray arrayWithArray:insideArray]]


这应该是最简单的解决方案。

从内存管理的角度考虑。每次输入InsiderRay时,计算机都会看到一个引用,即一个内存点。而[outsideArray addObject:insideArray];如果在outsideArray中放置对insideArray对象的引用,insideArray仍然指向内存中的同一位置

尝试实例化一个新对象并将其放置在outsideArray中。更改: [outsideArray addObject:insideArray]

全文如下: [outsideArray addObject:[NSMutableArray arrayWithArray:insideArray]]

这应该是最简单的解决办法