2012-08-09 3 views
0

다른 쌍둥이가 필요합니다.'code'속성이 'NSError *'유형의 개체에서 찾을 수 없습니다. 사용자 지정 NSError

이상하게도 사용자 정의 NSError의 속성에 액세스 할 수없는 것처럼 보입니다. EXC_BAD_ACCESS 오류가 계속 발생합니다. 여기에 내 코드입니다 :

 if (response.isUnauthorized) 
     { 
      NSDictionary *userInfo = [NSDictionary dictionaryWithObject:response.bodyAsString forKey:@"Error Message"]; 

      NSError *unAuthorizedError = [NSError errorWithDomain:@"MyApp" code: [response statusCode] userInfo:userInfo]; 
      [delegate dataControllerLoadFailed:unAuthorizedError]; 
      [ErrorHandler logError:unAuthorizedError fromClassName:NSStringFromClass([self class]) fromSelectorName:NSStringFromSelector(_cmd) ]; 
     } 

이 호출 :

-(void)dataControllerLoadFailed:(NSError *)error 
{ 
    NSString *message = [NSString stringWithFormat:@"Encountered an error: %@ - ", error.code]; 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"MyApp" 
                message:message 
                delegate:nil 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:nil]; 
    [alert show]; 
    [activityIndicator stopAnimating]; 

} 

나는 그것을 error.code 또는 오류 개체의 다른 멤버를 사용, dataControllerLoadFailed에서 메시지는 NSString를 만드는 나쁜 액세스 오류 ...

그래서이 실패

NSString *message = [NSString stringWithFormat:@"Encountered an error: %@ - ", error.code]; 

그러나 이상하게 충분히이 성공 :

NSString *message = [NSString stringWithFormat:@"Encountered an error: %@ - ", error]; 

시간을 줘서 고마워요!

답변

4

codeNSInteger이며, 이는 단지 typedef'd입니다. %d이 아님 %@

+1

일반적으로 '% ld'을 사용하는 것이 더 낫습니다 (그리고 컴파일러는 확실히 동의합니다). arg를 길게 던지십시오. – CodaFi

+0

@ Dan F ... 고마워요, 쉬운 사람이었습니다. Obj C의 오류 메시지를 더 명확하게 표시 할 수없는 이유는 무엇입니까? BAD_Access 오류로 위장한 유형 불일치 오류로 시간이 허비되었습니다. arrrgn .. 다시 한번 감사드립니다! – zukanta

1

EXC_BAD_ACCESS 오류는 일반적으로 코드에 유효한 objective-c 객체가 있어야하며 사용자가 가지고 있지 않은 것을 의미합니다. 귀하의 경우에는

당신은 NSLog에 잘못된 형식 지정자를 사용 : NSError 코드 속성이 NSInteger 알기 때문에 당신이 또한 염두에 두어야 % d 개 지정,

[NSString stringWithFormat:@"Encountered an error: %d - ", error.code]; 

@하지 %를 사용할 필요가 당신 경우 사용자에게 오류 정보를 보여주고 싶다면 오류 코드가 의미가 없을 수도 있습니다. localizedDescription, localizedFailureReason 메쏘드를 사용하여 사람이 읽을 수있는 오류 정보를 얻을 수 있습니다.

+0

나는 error.code를 NSError 멤버의 예제로 단순히 사용했다. 나는 ....에 액세스하는 데 문제가 있었다. 나는 분명히 내 사용자에게 에러 코드만을 보여주지 않을 것이다;) – zukanta

관련 문제