Objective c NSMutableArray变为空?

Objective c NSMutableArray变为空?,objective-c,nsmutablearray,Objective C,Nsmutablearray,我注意到,即使我的代码运行良好,也会发生一些奇怪的事情 假设我有两个数组:passwordEntered和tempPasswordEntered 在输入新的密码后,我每次都这样做: tempPasswordEntered=[passwordEntered mutableCopy]; 然后我清洗: [passwordEntered removeAllObjects]; 然后,下次我再次这样做(对于新输入的密码): 因此,tempPasswordEntered只包含最后输入的passwo

我注意到,即使我的代码运行良好,也会发生一些奇怪的事情

假设我有两个数组:
passwordEntered
tempPasswordEntered

在输入新的
密码后
,我每次都这样做:

 tempPasswordEntered=[passwordEntered mutableCopy]; 
然后我清洗:

 [passwordEntered  removeAllObjects];
然后,下次我再次这样做(对于新输入的
密码
):

因此,
tempPasswordEntered
只包含最后输入的
passwordEntered
,而不是两者。 如果第一次在数组中有4个位置,第二次仍然有4个位置, 所以我的问题是,拷贝是否替换了数组?当您添加对象时,它不会添加到它的最后一个位置


另一件事:我应该使用
retain
来代替吗?

tempPasswordEntered=[passwordEntered mutableCopy]
是一个变量赋值,与其他赋值一样,它完全更改变量的值。在本例中,
tempPasswordEntered
现在指向
passwordEntered
的副本,其中只有一个对象。因此,是的,它确实替换了数组,就像任何其他赋值一样

如果要将
passwordEntered
中的对象添加到
tempPasswordEntered
,请尝试
[tempPasswordEntered addObjectsFromArray:passwordEntered]


听起来你想要的是
mutableCopy
,而不是
retain
,但我真的不知道你的具体要求是什么,所以我不能多说了。无论如何,您可能应该使用ARC:)

tempPasswordEntered=[passwordEntered mutableCopy]
是一个变量赋值,与其他赋值一样,它完全更改变量的值。在本例中,
tempPasswordEntered
现在指向
passwordEntered
的副本,其中只有一个对象。因此,是的,它确实替换了数组,就像任何其他赋值一样

如果要将
passwordEntered
中的对象添加到
tempPasswordEntered
,请尝试
[tempPasswordEntered addObjectsFromArray:passwordEntered]

听起来你想要的是
mutableCopy
,而不是
retain
,但我真的不知道你的具体要求是什么,所以我不能多说了。无论如何,您可能应该使用ARC:)

后两种是简单的泄漏。第一种是制作副本的一种方法,但retVal=[fetchResults copy];是一种更好的复制方式

但是,当然,你根本不需要拷贝。这不是问题所在。你接着说,唯一不会崩溃的是一个空的结果集

这表明两件事之一;您的结果集已损坏(不太可能),或者您访问的结果集不正确(可能)

后两种是简单的泄漏。第一种是制作副本的一种方法,但retVal=[fetchResults copy];是一种更好的复制方式

但是,当然,你根本不需要拷贝。这不是问题所在。你接着说,唯一不会崩溃的是一个空的结果集


这表明两件事之一;您的结果集已损坏(不太可能),或者您访问结果集的方式不正确(很可能)。

发布更多代码,使整个类更好,结果集不清楚且信息不足。您使用ARC还是保留/释放。。。?如何定义
passwordEntered
tempPasswordEntered
,…已尝试:tempPasswordEntered=[NSMutableArray Array WithArray:passwordEntered]<代码>可变副本的
NSArray
以这种方式工作-它创建新数组,该数组是可变的(即使原始
NSArray
不可变),并且数组中的所有对象都不会被复制->浅拷贝,而不是深度拷贝。所有对象也保留在新阵列中。当您释放原始数组时,新可变副本中的所有对象仍处于活动状态,并且它们确实存在。当您执行
tempPasswordEntered=[passwordEntered mutableCopy]
时,它会将新数组分配给
tempPasswordEntered
,如果您使用ARC,则此ivar中以前的数组将被破坏。提供更多信息…@VXtreme
[NSMutableArray arraywhitharray:array]
[array mutableCopy]
做的事情相同。不需要尝试这个。发布更多的代码,更好的整个类,它是不清楚的,没有足够的信息。您使用ARC还是保留/释放。。。?如何定义
passwordEntered
tempPasswordEntered
,…已尝试:tempPasswordEntered=[NSMutableArray Array WithArray:passwordEntered]<代码>可变副本的
NSArray
以这种方式工作-它创建新数组,该数组是可变的(即使原始
NSArray
不可变),并且数组中的所有对象都不会被复制->浅拷贝,而不是深度拷贝。所有对象也保留在新阵列中。当您释放原始数组时,新可变副本中的所有对象仍处于活动状态,并且它们确实存在。当您执行
tempPasswordEntered=[passwordEntered mutableCopy]
时,它会将新数组分配给
tempPasswordEntered
,如果您使用ARC,则此ivar中以前的数组将被破坏。提供更多信息…@VXtreme
[NSMutableArray arraywhitharray:array]
[array mutableCopy]
做的事情相同。没必要试试这个。
 tempPasswordEntered=[passwordEntered mutableCopy]; 
NSArray *retVal = [[NSArray alloc] initWithArray:fetchResults];
NSArray *retVal = [[NSArray alloc] initWithArray:[fetchResults copy]];
NSArray *retVal = [[NSArray alloc] initWithArray:[fetchResults retain]];