我有以下代码:
- (IBAction)goButton:(id)sender
{
if(buttonCount==0)
{
previousStateArray=setUpArray;
NSLog(@"previous array count=%d",[previousStateArray count]);
[setUpArray removeAllObjects];
for(Node *n in nodeArray)
{
if(![temp isEqualToString:n.strName])
{
[setUpArray addObject:n.strName];
}
temp=n.strName;
}
}
}
- (IBAction)backButton:(id)sender
{
[setUpArray removeAllObjects];
setUpArray=previousStateArray;
NSLog(@"previous array count=%d",[previousStateArray count]);
buttonCount--;
}
setUpArray和previousStateArray都在 - viewDidLoad
方法中声明。我的视图只加载一次。在第一个NSLog中,我得到1作为输出但在第二个NSLog中我得到了
0作为输出,而我的数组都没有再次初始化。那为什么会这样呢???
答案 0 :(得分:1)
你的问题在于你的数组指针。
在goButton
:
previousStateArray=setUpArray;
现在previousStateArray
指向同一个数组setUpArray
指向的地方。
[setUpArray removeAllObjects];
这将删除所有对象,现在两个指针都指向一个空数组。
在backButton
:
setUpArray=previousStateArray;
它们都指向相同的空数组,因此该行是多余的。 如果要交换指针,应该保留一个临时指针。
答案 1 :(得分:1)
在您的代码中
`previousStateArray=setUpArray;` //previousStateArray pointing to same memory location of setUpArray.
使用- (void)setArray:(NSArray *)otherArray
类的NSMutableArray
方法。
[previousStateArray setArray: setUpArray];
[setUpArray setArray:previousStateArray];
- (IBAction)goButton:(id)sender
{
if(buttonCount==0)
{
[previousStateArray setArray: setUpArray];
NSLog(@"previous array count=%d",[previousStateArray count]);
[setUpArray removeAllObjects];
for(Node *n in nodeArray)
{
if(![temp isEqualToString:n.strName])
{
[setUpArray addObject:n.strName];
}
temp=n.strName;
}
}
}
- (IBAction)backButton:(id)sender
{
[setUpArray removeAllObjects];
[setUpArray setArray:previousStateArray];
NSLog(@"previous array count=%d",[previousStateArray count]);
buttonCount--;
}
答案 2 :(得分:0)
初始化数组
setUpArray = [[NSMuatableArray alloc] init];
答案 3 :(得分:0)
我认为giorashc的回答是正确的。 你的问题是使用" =" for Array只使新的previousStateArray指向setUpArray的相同内存。换句话说,previousStateArray与setUpArray相同。
有关详细信息,请搜索深度&浅拷贝。
答案 4 :(得分:-1)
您还应该使用if(0 == buttonCount)
而不是if(buttonCount==0)
。