В следующем коде NSError
конкретизирует (матч GKMatch GAMECENTER в):NSError странный вопрос - приложение падает при попытке получить доступ к свойствам NSError в
...
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
? Я мог видеть поля для Error в отладчике (те расширяемые данные), как:
NSObject NSObject
void * _reserved
NSInteger _code 875902004 Summary
NSString * _domain
NSDictionary * _userInfo
Так что похож объектом ошибки действительно есть вся информация, но ее ... Почему недоступно это так? Есть NSError
как-то не полностью/полностью созданный экземпляр или что-то еще?
try 'NSError * error = nil;' – Buntylm
Как вы сами сказали: ваш подход неправильный. Вы должны проверить * возвращаемое значение * метода. Если он возвращает «НЕТ», переменная ошибки будет содержать действительный объект, описывающий проблему. –
Но это не объясняет проблему. – Stan