Iphone 获取空数组

Iphone 获取空数组,iphone,objective-c,Iphone,Objective C,我有以下代码: - (IBAction)goButton:(id)sender { if(buttonCount==0) { previousStateArray=setUpArray; NSLog(@"previous array count=%d",[previousStateArray count]); [setUpArray removeAllObjects]; for(Node *n in node

我有以下代码:

- (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中,我得到1

0作为输出,而我的任何数组都不会再次初始化。那么为什么会发生这种情况呢?

初始化数组

setUpArray = [[NSMuatableArray alloc] init];

您的问题在于数组指针

按钮中

previousStateArray=setUpArray;
现在
previousStateArray
指向了
setUpArray
指向的同一个数组

[setUpArray removeAllObjects];
这将删除所有对象,现在两个指针都指向一个空数组

后退按钮中

setUpArray=previousStateArray;
它们都指向同一个空数组,因此这条线是多余的。 如果要交换指针,应该保留一个临时指针

在您的代码中

`previousStateArray=setUpArray;`  //previousStateArray pointing to same memory location of setUpArray.
使用
NSMutableArray
类的
-(void)setArray:(NSArray*)otherArray
方法

[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--;       
  }

我认为乔拉什的答案是正确的。 您的问题是对数组使用“=”只会使新数组previousStateArray指向setUpArray的同一内存。换句话说,previousStateArray与setUpArray相同


有关更多详细信息,您应该搜索深度和浅层副本。

如果(0==buttonCount)您还应该使用
而不是
如果(buttonCount==0)

哪一个数组计数是1,而你得到零?以前的