2013-04-26 3 views
0

Я думаю, что я нашел ошибку в NSError, но хочу запустить ее, передав вам ребята, и посмотрим, действительно ли это что-то не так.Отправка описания на NSError

Я получаю сбой при отправке описания в экземпляр NSError, который использует userInfo. Если для параметра userInfo установлено значение nil, описание работает как ожидалось.

NSString* const domain = @"DOMAIN"; 

NSError* nsError1 = [NSError errorWithDomain:domain code:1 userInfo:nil]; // Not using Dic 
NSLog(@"nsError1 description %@",[nsError1 description]); 

NSMutableDictionary* errorDetail = [NSMutableDictionary dictionary]; 
NSString* underlying = [NSString stringWithFormat:@"Error Domain=%@ Code=%d", NSPOSIXErrorDomain, 1]; 
[errorDetail setObject:underlying forKey:NSUnderlyingErrorKey]; 

NSError* nsError2 = [NSError errorWithDomain:domain code:1 userInfo:errorDetail]; // Useing Dic 
NSLog(@"nsError2 description %@",[nsError2 description]); // CRASH 

Выход:

2013-04-26 22:36:03.703 CategoryTest[14271:11303] nsError1 description Error Domain=DOMAIN Code=1 "The operation couldn’t be completed. (DOMAIN error 1.)" 
2013-04-26 22:37:30.459 CategoryTest[14271:11303] -[__NSCFString localizedDescription]: unrecognized selector sent to instance 0x901cca0 
+5

Ну, 'NSUnderlyingErrorKey' должен иметь объект NSError в соответствии с документацией. Поэтому я не вижу, как это ошибка. – Mats

ответ

3

Это ошибка в коде, а не ошибка в компании Apple. NSUnderlyingErrorKey документируется как объект NSError как соответствующее ему значение. Ваш код должен вместо этого сделать что-то вроде:

NSError *underlying = [NSError errorWithDomain:NSPOSIXErrorDomain code:1 userInfo:nil];