2010-04-25 73 views
2

我試圖讓下面的循環工作,以填補數組的數組的數組:構建陣列

while (condition) { 
[itemsArray fillFromDB]; 

if (! [checkArray containsObject:checkFlag]) { 
    // Add existing itemsArray to myArray 
    if (itemsArray.count) { 
    // add the itemsArray to myArray and create a new instance of itemsArray 
    [myArray addObject:itemsArray]; 
    [itemsArray release]; 
    NSMutableArray *itemsArray = [[NSMutableArray alloc] init]; 
    } 
    [itemsArray addObject:myObject]; 
    [checkArray addObject:checkFlag]; 
} else { 
    [itemsArray addObject:tmpEvent]; 
} } 

但是我嘗試塑造這個循環就倒了itemsArray

    釋放
  • 當我使用release(如上)時,數組不會重新初始化爲帶有alloc的新實例。在期望空白的同時,下一個對象被添加到舊數組中。
  • 當我使用removeAllObjects時,我的數組被清空,數組也被附加到myArray。

我在哪裏走錯了方向?

+0

只是出於好奇,你會接受任何答案嗎? – shosti 2010-04-26 00:02:02

+0

當然,我沒有迴應你,我像你說的那樣做了嗎? 好吧,剛剛看到你在說什麼,讓我點擊蜱... – iFloh 2010-04-26 09:59:51

回答

2

您可以放置​​:

itemsArray = nil; 

release消息後,保證你不會指向一箇舊的實例。

編輯

再次在這個時候,您有:

NSMutableArray *itemsArray = [[NSMutableArray alloc] init]; 

這是if語句中作用域。

於是拿出NSMutableArray,只是使用:

itemsArray = [[NSMutableArray alloc] init]; 
+0

嗨亞歷克斯,試過它,但導致「[NSCFArray計數]:方法發送到未初始化的可變數組對象'」錯誤... – iFloh 2010-04-25 08:47:23

+0

就是這樣,非常感謝 – iFloh 2010-04-25 09:02:27

1

不要寫NSMutableArray *itemsArray = [[NSMutableArray alloc] init]; --you're再次宣佈在if報表範圍的變量,所以if語句外,itemsArray會仍然參考舊值(我不知道爲什麼編譯器不抱怨)。您可以改爲說itemsArray = [[NSMutableArray alloc] init]

您也可能想要使用autorelease來簡化。

+0

非常感謝,就是這樣 – iFloh 2010-04-25 09:02:49

1

其他人已經發現了問題,但創造了一個新問題。第一次創建可變數組時,您需要使用NSMutableArray *itemsArray = [[NSMutableArray alloc] init];。然後,之後,您可以release並使用itemsArray = [[NSMutableArray alloc] init];。重要的是第一個(創建指針的)只發生一次,其餘的可以根據需要發生多次。

編輯: 您可以在if語句之前寫NSMutableArray *itemsArray;,然後在if語句中使用itemsArray = [[NSMutableArray alloc] init];

+0

嗨jrtc27,這就是我現在的樣子,只是在上面的代碼示例中不可見,非常感謝 – iFloh 2010-04-25 17:46:52