0

もう1つ目が必要です。

奇妙なことに、カスタム 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を作成すると、Bad Accessエラーが発生します...

したがって、これは失敗します:

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

しかし、奇妙なことに、これは成功します:

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

この時間を割いてくれた人に感謝します!

4

2 に答える 2

4

codeNSIntegertypedef されたものintです。使用する必要はあり%dません%@

于 2012-08-09T17:06:10.687 に答える
1

EXC_BAD_ACCESSエラーは通常、コードが有効な object-c オブジェクトを持っていることを期待していて、それを持っていないことを意味します。

あなたの場合、NSLog で間違ったフォーマット指定子を使用しています: NSError のコード プロパティは単純な NSInteger であるため、%@ ではなく %d 指定子を使用する必要があります

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

また、エラー情報をユーザーに表示したい場合、エラーコードは意味がない可能性があることに注意してください。メソッドを使用してlocalizedDescription、人間が読めるエラー情報を取得できますlocalizedFailureReason

于 2012-08-09T17:08:48.080 に答える