2011-10-23 1 views
1

나는 다음과 같은 코드가 있습니다. 나는 그것이 [temp length] 비트에서 오류가 있다고 가정합니다. 이상한 것은, 내가 temp에서 다른 NSString 메서드를 수행 할 수 있고 그들은 [temp characterAtIndex:0]처럼 잘 작동한다.NSString.length는 EXC_BAD_ACCESS

[[array objectAtIndex:i] retain];도 시도했지만 도움이되지 않습니다.

왜이 오류가 발생하는지 아는 사람이 있습니까?


EDIT : % lu 대신 % @이므로 NSLog에서 충돌이 발생했습니다. 진짜 문제는 내가이 게시물에서 생략 한 다른 코드와 관련이있다. 좀 더 놀고 난 후에, 나는 그것을 작동 시키게된다.

+0

나는 당신이 당신의 질문에 답한 것을 고려해 답을 정확하게 표시 할 것을 제안합니다. –

답변

9

"% @"자리 표시자는 개체 포인터 용이고 "length"는 포인터가 아닌 "NSUInteger"를 반환합니다. "% @"대신 "% lu"을 (를) 사용해보십시오.

+0

그걸 수정하지는 못했지만 흥미롭게도 함수 호출이 실제로 어디서 일어나는 지 오류가 발생했습니다. Xcode는 % d 대신 % lu를 제안했지만 두 가지 모두 같은 결과를 보였습니다. – Cole

2

이 (약간 정리) 버전은 나를 위해 작동 :

언급 thg435으로
NSError *error = nil; 
    NSString *path = [@"~/Desktop" stringByExpandingTildeInPath]; 
    NSArray *array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath: 
     path error:&error]; 
    if (error) NSLog(@"%@", error); 

    for (NSString *path in array) { 
     NSLog(@"Path length = %lu", path.length); 
    } 

당신이 그것을 임의의 수를 전달하면이 메모리 액세스 오류가 발생합니다, 그래서 "%의 @는"객체 포인터입니다 .