2010-03-12 52 views
2

我想使用NSMutableArray更新表視圖中的數據。很簡單:(NSMutableArray的奇怪問題 - 可能是一些內存損壞

發生什麼事情是我從NSURLConnection回調中獲取數據,我將它解析並存儲在一個數組中,並在表視圖上調用重載數據。問題是,當cellForRowAtIndexPath被回調框架。陣列仍顯示了正確的元素計數,但我早已經存儲的所有字符串對象顯示爲無效。

任何指針

+2

張貼一些代碼。你保留你的陣列嗎?你在數組中存儲什麼類型的對象?如果它是你自己的一類,那麼這個班級是否適當地保留了你放入的東西? – 2010-03-12 21:14:44

+0

是的,你需要發佈一些代碼,因爲它可能是一些事情。 – Remover 2010-03-21 17:43:46

回答

0

檢查您是否保留在NSURLConnection的回調NSString對象。您是否自動刪除它們?

編輯

好的,忘記最後一件事了。仔細檢查我自己,NSMutableArray會在您將它們添加到數組時自動保留這些對象。這樣你就不會需要明確留住他們:

的NSArray一樣, 的NSMutableArray的情況下,保持強勁的 引用其內容。如果 不使用垃圾回收,則當您將一個對象添加到數組時, 對象會收到一條保留消息。當 對象從可變的 數組中移除時,它會收到釋放消息。

所以你需要檢查你沒有做任何其他顯式的發佈你正在添加到陣列的對象。他們是否參考其他地方?

0

問題是你在哪裏添加字符串對象到一個可變數組。字符串對象在那個時候已經失效了。這就是爲什麼你從數組訪問它們的時間,它們無效或不存在。

所以最好的方法是檢查代碼在解析過程中添加字符串對象的位置。

0

您的問題可能是您沒有正確啓動陣列。

你是否在使用數組作爲類的屬性?

確保何時加載您分配的視圖並啓動陣列。

1

可爲U的問題是像下面

NSString *value = [NSString stringWithFormat:@"%@",stringFromWebService]; 
[arrayOfObjects addObject:value]; 
[value release]; // This should not be released 

這未必是準確的,但可能是相似的,

這裏值從NSString的類方法,它是一個自動釋放的對象,因此,如果獲得你可以看到它會被釋放兩次,一次是由autorelease和其他人發佈。

這是您需要檢查的區域。

希望它有助於

問候 納文RV