2011-04-26 16 views
0

私は質問があります:私は複数のビューで渡すNSMutableArrayを持っています。ビューの1つでは、その配列(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内で値を編集するにはどうしたらいいですか? ObjectAtIndexを置き換えないのはなぜですか?

編集:実際には変更できませんでした。 私が持っている::それでも、主な疑問は残る

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

私が使用している:配列geselecteerdeLijstの指標は明らかにWARNINGLIST内で変更したため[warningList replaceObjectAtIndex:[warningList indexOfObject:geselecteerdeLijst] withObject:keuzeLijst]が、それは私にoutofboundsエラーになります。何か案は?

+0

が選択されている場合は、選択された配列に辞書が含まれます。あなたのデータ構造を精巧にしてください。あなたはnslogを入れて、値が適切に来ているかどうかを調べることができます。 – Gypsa

答えて

6

selectedListは、不変アレイであり、変更をサポートしていません。あなたはしかし、このような何かを行うことができます。

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

編集:明確にするために、__NSArrayI__NSArrayMは変更可能です、NSArrayの具体的な不変のサブクラスです。プライベートクラスの名前に頼るべきではありませんが、彼らは自分自身で話すので、少なくとも変更可能なものと不可能なものを知ることができます。

+0

フィードバックをいただきありがとうございます。 – Joetjah

+0

@Joetjah 'geselecteerdeLijst indexOfObject:tester]'を送る前に 'geselecteerdeLijst'に' tester'を追加してください。そうでないとNSNotFoundが返ってくるでしょう。 – Costique

+0

こんにちは、それは正しいですが、エラーはどこか別の場所で発生します。 geselecteerdeLijst内のアイテムを編集したので、geselecteerdeLijstが入っている配列をどうにか編集しました。geselecteerdeLijst内のオブジェクトを置き換えただけで、geselecteerdeLijstのインデックスが変更されました。 – Joetjah

関連する問題