财产代码'在类型' NSError *'的对象上找不到关于自定义NSError

时间:2012-08-09 17:00:32

标签: objective-c ios

我需要另一双眼睛。

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

感谢任何人给这个时间!

2 个答案:

答案 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];

另请注意,如果您想向用户显示错误信息,那么错误代码可能没有意义,您可以使用localizedDescriptionlocalizedFailureReason方法获取人类可读的错误信息