2012-04-18 97 views
0

我試圖用addObjectsFromArray爲「串聯」(這麼說)兩個數組在一起。下面是代碼的概述:addObjectsFromArray返回錯誤

NSArray *fixed = [NSArray arrayWithArray:timeline2]; 
NSLog(@"Made the temp successfully.Contents: %@", fixed); 

[arrayOfNewsItems addObjectsFromArray:fixed]; 

日誌陳述可以證實,有「固定」和「timeline2」陣列的有效數據,並較早在節目中,我證實了該數據存在「 arrayOfNewsItems「數組。

我嘗試在addObjects ..後收到的例外是:

'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object' 

arrayOfNewsItems是一個的NSMutableArray。這是一個財產。其實它是這樣宣稱的:

@property (nonatomic) NSMutableArray * arrayOfNewsItems; 

也許這是「非原子」聲明?我也不完全理解這些。

我能想到的唯一的事情是每個數組中的數組元素具有不同的對象類型 - 或者說,雖然它們是字典對象的每個數組,但它們本身由不同的鍵/值對列表組成。例如:

數組元素1可能包含:

(key)     (value) 
name     Joe 
title     Mr. 

和數組元素2可能包含:現在

(key)     (value) 
phone     555-1263 
shoeSize    2 

,任何其他語言,我絕不會嘗試這一點,但我我很確定我在之前的帖子中被告知這可以做。我知道objective-c將它們存儲爲(id),並且我們可以像這樣將所有內容混合在一起。所以,問題是:

  • 這是真的嗎?
  • 如果是這樣,我錯過了什麼?

在我開始編寫一個函數以使所有字段名稱與最終數組相同之前,我會對此做出明確的回答。

我一定會感激任何和所有幫助我能!謝謝。

+0

我看到「關鍵」和「價值」的存在,但你所談論的陣列和不是詞典。數組中的項「NSDictionary」對象或它們是什麼? – 2012-04-18 19:00:12

+0

你在哪裏設置'arrayOfNewsItems'? – 2012-04-18 19:00:20

+0

@ RichardJ.RossIII,這也正是我認爲的錯誤所在。看到我的答案;) – 2012-04-18 19:01:45

回答

1

嗯,這是很清楚的:mutating method sent to immutable object
這意味着你有NSArray不變實例。

即使它被定義爲NSMutableArray,這並不意味着它真的是一個。它只會在嘗試調用像-addObjectsFromArray:這樣的變異方法時刪除警告。

你必須確保創建陣列時,您發送分配/初始化到可變版本:

self.arrayOfNewsItems = [[[NSMutableArray alloc] init] autorelease]; 
+0

即使它是一個屬性,我必須在內部使用之前進行alloc和init操作? – pereirap 2012-04-19 02:15:12

+0

我剛剛檢查過,並且在之前使用下面的代碼初始化了數組:mutate:arrayOfNewsItems = [[NSMutableArray alloc] init]; - 但它的功能不同。 – pereirap 2012-04-19 02:26:24

+0

這是不可能的。你可以在GitHub上託管你的整個項目並分享鏈接嗎?另外,嘗試記錄'[self.arrayOfNewsItems類]'。 – 2012-04-19 04:30:19