在以下代码中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_ACCESS
或SIGABRT -[NSCFString userInfo (or domain, localizedDescription, code etc)] unrecognized selector sent to instance 0x...
。我可以看到error不是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
不知何故没有完全/完全实例化或什么?
尝试将错误指针初始化为nil
NSError * error = nil;
你得到一个崩溃,因为没有错误,你的指针包含一个随机地址。
替换这一行
NSError* error = nil;