获得Null数组

时间:2012-05-14 06:51:26

标签: 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 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作为输出,而我的数组都没有再次初始化。那为什么会这样呢???

5 个答案:

答案 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)