1

입니다 제공하지만 작동보기 처음로드 할 때 일입니다 .. 어떤 문제를 제공하지 않습니다 ..NSMutableArray를 addObject : 내가 노력하고 무엇 코드 ..</p> <p>을 여기에 오류

하지만, 내가 다시보기를로드하고이 코드를 호출 할 때 .. 그것은

사람은 도움을 주시기 바랍니다 수 있습니다 .. 내가 위에 보이는하려고하지만 아무것도 찾을 수없는

arrMain addObject:에 오류가 있습니다 ??

NSUserDefaults *ds = [NSUserDefaults standardUserDefaults]; 
NSMutableArray *arrMain = [ds objectForKey:@"files"]; 
int i; 

if([arrMain count] > 0) 
{ 
    i = [arrMain count] + 1; 

} 
else 
{ 
    arrMain = [[NSMutableArray alloc] init]; 
    i = 1; 
} 
NSLog(@"File Name To Be Saved %d.txt",i); 

NSArray *sd = [[NSArray alloc] init]; 
sd = [dict componentsSeparatedByString:@"/"]; 
NSMutableDictionary *dict1 = [[NSMutableDictionary alloc] init]; 

[dict1 setObject:[sd objectAtIndex:[sd count] - 1] forKey:@"name"]; 
NSString *OrgFilename = [sd objectAtIndex:[sd count] - 1]; 
NSArray *extArr = [[NSArray alloc] init]; 
extArr = [OrgFilename componentsSeparatedByString:@"."]; 
NSString *flExt = [extArr objectAtIndex:1]; 
[dict1 setObject:[NSString stringWithFormat:@"%d.txt",i,flExt] forKey:@"filename"]; 

// *** error happens VVVV 
[arrMain addObject:dict1]; 
// *** error happens ^^^^ 

[ds setObject:arrMain forKey:@"files"]; 
[ds synchronize]; 
+1

1) 어떤 오류가 발생하고 있습니까? 2) ARC를 사용하고 있습니까? –

+0

안녕하세요 .. 아니 호를 사용하고 있지 않습니다 .. 문제는 어떤 오류도 출력하지 않습니다. 그냥 프로그램이 신호를 받았다고 SIGBART – Darshan

+1

코드를 자르면 문제를 보여줄 수있는 최소값을 갖게됩니다. 관련없는 코드의 홀수 비트가 있습니다. – Mark

답변

1

문제는 당신이 NSUserDefaults에서 NSMutableArray를 검색하려고합니다. NSMutableArray을 반환하지 않지만 대신 NSArray을 반환합니다. 당신은하고 싶은 것 :

NSMutableArray *arrMain = [[[ds objectForKey:@"files"] mutableCopy] autorelease]; 

그것을 통해 처음으로 "일"그 이유는, 유효한 NSMutableArray을 만들 수 있도록 arrMain은 전무했다이었다 NSUserDefaults로 저장. 그 후, 당신은 유효한 객체 (non-nil)를 얻었지만 그것이 예상했던 타입이 아닙니다. -[NSUserDefaults objectForKey:]id 유형을 반환하므로 해당 유형이 아니더라도 행복하게 NSMutableArray 객체를 할당했습니다.

+0

그건 내 첫 번째 생각도 있었지만,'NSArray의 인스턴스로 보내진 잘못된 셀렉터가 콘솔에 기록되도록 만들 것이고, OP는 에러가 없다고 표시하고 SIGABRT는 – Ahti

+0

No입니다. 왜냐하면 객체의 타입이 NSMutableArray이기 때문에 그 메소드의 호출을 기꺼이 동의 할 것입니다. – gschandler

+0

아니요, 객체는 NSMutableArray *로 형변환됩니다. Objects의 경우 이것은 컴파일러를위한 것입니다. 메모리에있는 실제 객체는 여전히 NSArray이므로 'addObject'에 응답하지 않고 예외를 throw합니다. – Ahti

관련 문제