Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.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
Objective c 删除NSMutableArray的元素_Objective C_Nsmutablearray - Fatal编程技术网

Objective c 删除NSMutableArray的元素

Objective c 删除NSMutableArray的元素,objective-c,nsmutablearray,Objective C,Nsmutablearray,我已经尝试修复一个bug很长时间了,我可以提出一些建议。我有两个NSmutableArraytem和listlist是一个带有数组的数组,所以每次我在完成后将数据加载到tem上,我都会说[list addObject:tem]我的代码是这样的,在向tem添加新的数据集之前,我删除了它的所有元素,然后再次开始添加元素。但是,从tem中删除元素会导致它们也从列表中删除。如何避免将其从列表中删除 不确定您所说的“'list'是一个带数组的数组”是什么意思——如果它是一个标准方法,那么它是错误的——所以

我已经尝试修复一个bug很长时间了,我可以提出一些建议。我有两个NSmutableArray
tem
list
list
是一个带有数组的数组,所以每次我在完成后将数据加载到
tem
上,我都会说
[list addObject:tem]我的代码是这样的,在向
tem
添加新的数据集之前,我删除了它的所有元素,然后再次开始添加元素。但是,从
tem
中删除元素会导致它们也从
列表中删除。如何避免将其从
列表中删除

不确定您所说的“'list'是一个带数组的数组”是什么意思——如果它是一个标准方法,那么它是错误的——所以您应该澄清这一点。但回答我认为是你的问题:

addObject
添加对象本身,即只添加指向数组的指针
tem
。两个指针仍然引用同一个NSArray实例,因此通过一个指针执行的任何操作都将通过另一个指针看到。如果这让你感到困惑,你应该这样做

如果确实希望将
列表中的对象分组到内部数组(如
tem
)中,则每次都应创建一个新的
tem
数组:

[list addObject:tem];
tem = [NSMutableArray arrayWithCapacity:1];
// new stuff added to tem will not appear in the array inside list
(这里要注意对象所有权——本例使用了一种方便的方法,可以自动释放
tem
,但您可能需要
适当地保留
释放
。)

另一方面,如果希望将
tem
中的对象添加到
列表中,请使用
addObjectsFromArray

[list addObjectsFromArray:tem];
// objects in list will not be affected by subsequent changes to tem
[tem removeAllObjects];

如果你能发布代码的话,我真的很有用。谢谢你,这非常有用。我的意思是,我希望NSMutableArray列表是一个2D数组,即使用“[NSMutableArray arrayWithArray:myArray]”类型。所以每次我向列表中添加一个新数组时,我都希望它像在2D数组中一样被存储为一个新行。我如何才能做到这一点?@Label
arrayWithArray
不能做到这一点。它只是用您传入的数组的内容填充新数组。没有2D
NSMutableArray
类型,由您以2D方式使用阵列。这些问题的答案可能会有所帮助。