2011-10-18 2 views
1

NSMutableArray에 개체를 삽입하려고하면 '프로그램 수신 신호 : SIGABRT'오류가 발생하지만 이유를 알 수 없습니다.NSMutableArray에 개체를 삽입 할 때 '프로그램 수신 신호 : 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에서 배열을 검색 한 후에 변경 가능한 복사본을 만들어야합니다.

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

당신이 Memory Management Rules에 따라 mutableCopy에 의해 반환 된 객체를 소유 유의 사항 : 당신은 단지 배열에 mutableCopy 메시지를 보낼 그래서 다행히 당신을 위해, NSArrayNSMutableCopying 프로토콜을 준수합니다. 즉, 작업을 마쳤 으면 릴리스해야합니다.

+1

감사합니다. 오랫동안 비슷한 문제로 고생하고있었습니다 ... – iOSDev

관련 문제