2013-04-26 66 views
0

我想我發現了一個NSError的錯誤,但想運行它通過你們,看看它實際上只是我做錯了什麼。發送描述到NSError

將描述發送到使用userInfo的NSError實例時發生崩潰。 如果userInfo設置爲零,說明按預期工作。

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 2013-04-26 21:58:53

回答

3

這是你的代碼錯誤,而不是蘋果的一個bug。記錄爲NSUnderlyingErrorKey的對象具有對應的值NSError。你的代碼應該這樣做:

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