В следующем коде создается экземпляр NSError
(соответствует GKMatch от GameCenter):
...
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 localizedDescription];
[error domain];
[error code];
[error description];
etc.
но приложение все еще падает на строке NSLog
независимо от того, какую информацию я пытаюсь получить. Я знаю, что подход неправильный, и мне нужно использовать переменную BOOL
в строке, которая отправляет данные, но это не вопрос. Вопрос в том, что не так с объектом NSError
? Я мог видеть поля ошибок в отладчике (эту расширяемую информацию), например:
NSObject NSObject
void * _reserved
NSInteger _code 875902004 Summary
NSString * _domain
NSDictionary * _userInfo
Итак, кажется, что у объекта ошибки есть вся информация, но она недоступна... Почему это так? Является ли NSError
каким-то образом не полностью/полностью созданным или что-то в этом роде?
NSError* error = nil;
- person Buntylm   schedule 15.05.2013NO
, переменная ошибки будет содержать допустимый объект, описывающий проблему. - person Martin R   schedule 15.05.2013