2012-08-26 5 views
0

그래서 plist 파일을 사용하여 NSMutableArray를 저장하고 객체를 추가하면 해당 plist 파일에 저장됩니다.NSMutableArray에서 plist를 사용하는 동안 오류가 발생했습니다.

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]' 

코드 :

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:1]; 
_prsPath = [documentsDirectory stringByAppendingPathComponent:@"records.plist"]; 

prs = [[NSMutableArray alloc] initWithContentsOfFile:_prsPath]; 

if (prs == nil) { 
    prs = [NSMutableArray array]; 
} 

와 "addObject"후

:

[prs writeToFile:_prsPath atomically:YES]; 

시간이 코드 Struggeling 그러나 나는이 오류를 얻고있다.

미리 감사드립니다.

+0

먼저 요소에 액세스하려고 시도하기 전에 경로가 nil인지 확인하십시오. 그런 다음 요소에 액세스하려고 할 때 배열에 충분한 요소 (0보다 큼)가 있는지 확인하십시오. 사실, 그 배열이 nil이더라도 0을 반환 할 것이므로 1 단계를 건너 뛸 수 있습니다. – Till

답변

4

NSString *documentsDirectory = [paths objectAtIndex:0];이 아니어야합니까?

오류는 범위를 벗어났습니다. 즉, 인덱스에서 가장 높은 인덱스 위에있는 객체를 배열에 요청하는 것입니다. 이 경우 가장 높은 인덱스가 0 (배열에서 하나의 오브젝트 만)인데도 인덱스 1 (두 번째 오브젝트)에있는 오브젝트를 요청합니다.

+0

Uh,이 오류가 발생했습니다 : 캐치되지 않은 예외 'NSRangeException'으로 인해 응용 프로그램 종료 중, 이유 : '*** - [__ NSArrayM objectAtIndex :] : 빈 배열의 범위를 벗어나는 색인 0' – Sjors

+0

Btw, 배열 가능성이 높습니다. 아이템이 하나 밖에 없다면, [ar lastObject]를 사용하는 편이 좋을 것입니다. 아이템이 없다면 자동으로 nil을 반환 할 것이기 때문입니다. – mifki

+0

에는 사용자가 추가 한만큼의 항목이 포함됩니다. – Sjors

관련 문제