2012-05-14 6 views
0

:setUpArrayとpreviousStateArrayの両方がで宣言されている取得、私は次のコードしている、ヌル配列

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

からviewDidLoad method.Myビューのみ最初のNSLog once.In私は出力としてではなく秒に1を取得していますロードされますNSLog私は

0を出力していますが、私の配列は何も再初期化しません。なぜこれが起こっているのですか?

+0

配列数は1であり、uはゼロになりますか?前? – Saad

+0

previousStateArray –

答えて

1

配列は、あなたの問題は、あなたの配列ポインタである初期化します。 goButton

previousStateArray=setUpArray; 

previousStateArray点同じアレイsetUpArrayには、を指しています。

[setUpArray removeAllObjects]; 

これはすべてのオブジェクトを削除し、両方のポインタが空の配列を指すようになりました。 backButton

setUpArray=previousStateArray; 

彼ら同じ空の配列の両方の点ので、この行は、冗長です。 ポインターを交換する場合は、一時ポインターを保持する必要があります。あなたのコードで

+0

あなたは正しいです –

0

setUpArray = [[NSMuatableArray alloc] init]; 
+0

私は既に両方の配列を-viewDidLoadで初期化しています –

1

`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--;  
    } 
0

ジオラッシュの答えは正しいと思います。 問題は配列に "="を使用しているだけです。新しい配列はpreviousStateArrayがsetUpArrayの同じメモリを指し示すようにします。つまり、previousStateArrayはsetUpArrayと同じです。

詳細については、&の浅いコピーを検索する必要があります。

-1

if(buttonCount==0)ではなく、if(0 == buttonCount)も使用する必要があります。

関連する問題