2011-04-26 40 views
0

我有一個問題:我有一個NSMutableArray,我在多個視圖中傳遞。在其中一個視圖中,可以編輯該數組(NSMutableDictionary)內的對象的值。我這樣做使用代碼:編輯數組中的NSMutableDictionary

NSMutableDictionary *tester = [[NSMutableDictionary alloc] initWithDictionary:selectedItem copyItems:YES]; 
NSMutableString *newLoc = [[NSMutableString alloc] initWithString:locationField.text]; 
[tester setValue:newLoc forKey:@"Location"]; 
[selectedList replaceObjectAtIndex:[selectedList indexOfObject:selectedItem] withObject:tester]; 

我遇到的問題是取代selectedList中的對象。它給出了錯誤*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0xa631e30' 它的工作原理是,如果我將新項目複製到selectedList的複製數組中,並再次使用新值分配selectedList,但其他視圖在數組中找到相同的列表時遇到問題(新分配的位置)。

TL; DR版本:如何在NSMutableArray中編輯值(通過替換?)?爲什麼不replaceObjectAtIndex工作?

編輯:它確實是不可改變的。不過,主要問題仍然是: 我有:

NSMutableDictionary *tester = [[NSMutableDictionary alloc] initWithDictionary:geselecteerdItem copyItems:YES]; 
[geselecteerdItem setValue:nieuweLoc forKey:@"Location"]; 
[geselecteerdeLijst replaceObjectAtIndex:[geselecteerdeLijst indexOfObject:tester] withObject:geselecteerdItem]; 

當我使用:[warningList replaceObjectAtIndex:[warningList indexOfObject:geselecteerdeLijst] withObject:keuzeLijst],它給了我一個outofbounds錯誤,因爲陣列geselecteerdeLijst的索引中的warningList明顯變化。有任何想法嗎?

+0

selectedItem你的字典,如果是的話那麼你的數組selectedList是否包含字典。請詳細說明您的數據結構。您可以將nslog放入以查看值是否正確。 – Gypsa 2011-04-26 08:11:47

回答

6

selectedList不可改變陣列,它不支持任何修改。你可以做這樣的事情,雖然:

NSMutableArray *tmp = [NSMutableArray arrayWithArray: selectedList]; 
[tmp replaceObjectAtIndex:[selectedList indexOfObject:selectedItem] withObject:tester]; 

編輯:爲了澄清,__NSArrayINSArray具體不變的子類,__NSArrayM是一個可變的一個。你不應該依賴私人類的名字,但是因爲他們自己說話,你至少可以知道哪些是可變的,哪些不是。

+0

更新了問題,謝謝您的反饋! – Joetjah 2011-04-26 08:33:42

+0

@Joetjah在發送'[geselecteerdeLijst indexOfObject:tester]'之前,請確保您將'tester'添加到'geselecteerdeLijst',否則它將返回NSNotFound,這絕對是越界。 – Costique 2011-04-26 09:14:42

+0

嗨,這是正確的,但錯誤發生在別的地方。因爲我編輯了geselecteerdeLijst中的一個項目,所以它編輯了geselecteerdeLijst所在的數組。它改變了geselecteerdeLijst的索引,而我只替換了geselecteerdeLijst中的一個對象。 – Joetjah 2011-04-26 09:28:15