0

我需要另一双眼睛。

奇怪的是,我似乎无法访问自定义 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];

}

在 dataControllerLoadFailed 中创建消息 NSString 时出现错误访问错误,无论是使用 error.code 还是错误对象上的任何其他成员...

所以这失败了:

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

但奇怪的是,这成功了:

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

感谢任何给这个时间的人!

4

2 回答 2

4

code是一个NSInteger,它只是一个 typedef'd int。你需要使用%d%@

于 2012-08-09T17:06:10.687 回答
1

EXC_BAD_ACCESS错误通常意味着您的代码期望具有有效的objective-c 对象而您没有它。

在您的情况下,您在 NSLog 中使用了错误的格式说明符: NSError 中的代码属性是普通的 NSInteger 因此您需要使用 %d 说明符,而不是 %@

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

另请记住,如果您想向用户显示错误信息,则错误代码可能没有意义,您可以使用localizedDescription,localizedFailureReason方法获取人类可读的错误信息

于 2012-08-09T17:08:48.080 回答