0

我有以下代码:

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

4

5 回答 5

1

你的问题是你的数组指针。

goButton

previousStateArray=setUpArray;

现在previousStateArray指向同一个数组setUpArray

[setUpArray removeAllObjects];

这将删除所有对象,现在两个指针都指向一个空数组。

backButton

setUpArray=previousStateArray;

它们都指向同一个空数组,所以这条线是多余的。如果你想交换指针,你应该保留一个临时指针。

于 2012-05-14T07:05:12.040 回答
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--;       
  }
于 2012-05-14T07:11:36.437 回答
0

初始化数组

setUpArray = [[NSMuatableArray alloc] init];
于 2012-05-14T06:53:32.417 回答
0

我认为 giorashc 的回答是正确的。您的问题是对 Array 使用“=”只会使新的 previousStateArray 指向 setUpArray 的相同内存。换句话说,previousStateArray 与 setUpArray 相同。

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

于 2012-05-14T07:14:53.227 回答
-1

您还应该使用if(0 == buttonCount)而不是if(buttonCount==0).

于 2012-05-14T07:54:10.830 回答