我正在尝试使用更多信息更新NSError
对象。例如,api调用可能会失败,我想更新从api类返回的错误对象与视图控制器信息(导致错误的方法名称,客户端消息,任何其他信息)。 UserInfo
字典没有setter方法,并且尝试为字典设置值会引发异常(我认为不符合键值代码)。我考虑使用更新的用户信息创建一个新的NSError
对象,但我不确定是否会丢失信息。
更新NSError对象的用户信息字典的最佳方法是什么?
答案 0 :(得分:8)
规范方法是创建一个新的NSError
,然后将原始的NSError
放在密钥userInfo
下的NSUnderlyingErrorKey
字典中。这是一个稍微不同的结果,但最好的我可以告诉NSErrors
非常故意不可变。
答案 1 :(得分:8)
通过快速扩展,这很容易:
extension NSError {
func addItemsToUserInfo(newUserInfo: Dictionary<String, String>) -> NSError {
var currentUserInfo = userInfo
newUserInfo.forEach { (key, value) in
currentUserInfo[key] = value
}
return NSError(domain: domain, code: code, userInfo: currentUserInfo)
}
}
用法:
var yourError = NSError(domain: "com.app.your", code: 999, userInfo: nil)
yourError = yourError.addItemsToUserInfo(["key1":"value1","key2":"value2"])
答案 2 :(得分:3)
最简单的方法是获取userInfo
字典的可变副本,并添加您喜欢的任何内容。然后你必须创建一个新的NSError
(因为没有setUserInfo:方法),其域名和代码与原始域名和代码相同。