2011-10-18 7 views
1

NSMutableArrayにオブジェクトを挿入しようとすると、なぜ「プログラム受信信号:SIGABRT」エラーが発生するのですか?NSMutableArrayにオブジェクトを挿入するときに 'Program received signal:SIGABRT'が返される

これは私のコードです。具体的には、エラーの原因となっているinsertObject:valueです。

NSMutableDictionary *myDictionary = [NSMutableDictionary dictionary]; 
[myDictionary setValue:valueName.text forKey:kValueName]; 
[myDictionary setObject:subValuesList forKey:kSubValuesList]; 

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
int position = appDelegate.position; 

NSMutableArray *valuesList = [[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray]; 
[valuesList insertObject:myDictionary atIndex:position]; 

答えて

7

NSUserDefaultsから返される値は、可変オブジェクトを値として設定しても変更できません。

NSUserDefaultsから配列を取得した後で、変更可能なコピーを作成する必要があります。あなただけの配列にmutableCopyメッセージを送信する必要がありますので幸いにもあなたのために、NSArrayは、NSMutableCopyingプロトコルに準拠しています。

NSMutableArray *valuesList = [[[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray] mutableCopy]; 

あなたはMemory Management RulesごとにmutableCopyによって返されたオブジェクトを所有していることに注意してください。言い換えれば、それを済ませたら解放する必要があります。

+1

ありがとうございます!長い間ずっと同じ問題に苦しんでいた... – iOSDev

関連する問題