我需要另一双眼睛。
奇怪的是,我似乎无法访问我的自定义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时出现Bad Access错误,无论是使用error.code还是错误对象上的任何其他成员......
所以失败了:
NSString *message = [NSString stringWithFormat:@"Encountered an error: %@ - ", error.code];
但奇怪的是,这成功了:
NSString *message = [NSString stringWithFormat:@"Encountered an error: %@ - ", error];
感谢任何人给这个时间!
答案 0 :(得分:4)
code
是一个NSInteger
,它只是一个typedef'd int
。您需要使用%d
而不是%@
答案 1 :(得分:1)
EXC_BAD_ACCESS
错误通常意味着您的代码需要具有有效的objective-c对象,而您却没有。
在你的情况下你在NSLog中使用了错误的格式说明符:NSError中的code属性是普通的NSInteger因此你需要使用%d说明符,而不是%@
[NSString stringWithFormat:@"Encountered an error: %d - ", error.code];
另请注意,如果您想向用户显示错误信息,那么错误代码可能没有意义,您可以使用localizedDescription
,localizedFailureReason
方法获取人类可读的错误信息