向 NSError 发送描述

Posted

技术标签:

【中文标题】向 NSError 发送描述【英文标题】:Sending description to NSError 【发布时间】:2013-04-26 21:52:17 【问题描述】:

我想我在 NSError 上发现了一个错误,但想通过你们运行它,看看是否真的只是我做错了什么。

向使用 userInfo 的 NSError 实例发送描述时发生崩溃。 如果 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

【问题讨论】:

嗯,NSUnderlyingErrorKey 根据文档应该有一个 NSError 对象。所以我看不出这是一个错误。 【参考方案1】:

这是您的代码中的错误,而不是 Apple 的错误。 NSUnderlyingErrorKey 被记录为有一个 NSError 对象作为与其对应的值。您的代码应该改为:

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

【讨论】:

以上是关于向 NSError 发送描述的主要内容,如果未能解决你的问题,请参考以下文章

无法向 BLE 外设 (ZL-RC04A) 设备发送数据

根据预期字符串检查 NSError 描述失败

Facebook iOS SDK 3.2.1 - [NSError fberrorShouldNotifyUser]:无法识别的选择器发送到实例

UIWebView - 抛出了啥 NSError?

从 NSError 解析自定义值

用于回调的 iOS NSError/NSDictionary