NSError奇怪的问题 - 在尝试访问NSError的属性时应用程序崩溃

时间:2013-05-15 07:26:54

标签: iphone ios nserror

在以下代码中NSError实例化(匹配是GameCenter的GKMatch):

    ...
    NSString * deviceID = appDelegate.deviceID;
    MessageWithDeviceID message;
    message.message.messageType = kMessageTypeDeviceID;
    const char* const deviceIDAsUTF8 = deviceID.UTF8String;
    for (size_t idx=0;idx<32;idx++)
        message.deviceID[idx] = deviceIDAsUTF8[idx];

    NSData *data = [NSData dataWithBytes:&message length:sizeof(message)];
    NSError * error;
    [match sendDataToAllPlayers:data withDataMode:GKMatchSendDataReliable error:&error];

    data  = nil;
    if (error) 
    NSLog(@"An error is occured: %@",error);
    ...

但该应用在最后显示的行EXC_BAD_ACCESSSIGABRT -[NSCFString userInfo (or domain, localizedDescription, code etc)] unrecognized selector sent to instance 0x...时崩溃。所以我可以看到错误不是nil并且它是实例化的对象但我无法从中获取任何信息。我试着得到以下内容:

[error localizedDescription];
[error domain];
[error code];
[error description];
etc.

但无论我想要获取哪些信息,应用仍会在NSLog行崩溃。我知道这种方法不对,我需要在行中使用BOOL变量来发送数据,但这不是问题的关键。问题是NSError对象有什么问题?我可以在调试器(可扩展信息)中看到错误的字段,如:

NSObject       NSObject
void *         _reserved
NSInteger      _code        875902004  Summary
NSString *     _domain
NSDictionary * _userInfo

所以似乎错误对象确实拥有所有信息,但它无法访问...为什么会这样? NSError某种程度上是不是完全/完全实例化了什么?

2 个答案:

答案 0 :(得分:7)

尝试将错误指针初始化为nil

NSError * error = nil;

因为没有错误而且您的指针包含随机地址而导致崩溃。

答案 1 :(得分:3)

替换此行。

NSError* error = nil;