收到一条错误消息,提示“从“字符串”转换为不相关的类型 NSDictionary 总是失败”。我得到一个线程 1:EXC_BAD_INSTRUCTION
Posted
技术标签:
【中文标题】收到一条错误消息,提示“从“字符串”转换为不相关的类型 NSDictionary 总是失败”。我得到一个线程 1:EXC_BAD_INSTRUCTION【英文标题】:Getting an error saying "Cast from "String" to unrelated type NSDictionary always fails". I get a Thread 1: EXC_BAD_INSTRUCTION 【发布时间】:2018-04-16 17:17:07 【问题描述】:我在 let jsonData = result as 上遇到错误! NSDictionary 行。任何可能的方法来帮助我解决这个问题。
@objc func registerUser(button: UIButton)
//Creating parameters for post request
let parameters: Parameters = ["username": userName.text!, "password": passWord.text!, "email": emailField.text!, "name": nameField.text!]
//Sending http post request
Alamofire.request(urlUserRegister, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseString
response in
//printing response
print(response)
//getting the json value from the server
if let result = response.result.value
//Convert as NSDictionary
let jsonData = result as! NSDictionary //This is where the error occcurs
//displaying the message in label
self.messageLabel.text = jsonData.value(forKey: "message") as? String
【问题讨论】:
1.您使用的是responseString
而不是responseJSON
。 2. 这是斯威夫特。使用Dictionary
而不是NSDictionary
。
错误信息明确指出result
是String
而不是Dictionary
。并且不要在 Swift 中使用 NSDictionary
。您正在与强类型系统作斗争。使用本机类型[String:Any]
。在这种情况下,永远不要使用value(forKey
。使用密钥订阅。
@the4kman 当我使用 responseJSON 时,我收到此错误。 FAILURE: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "字符 0 周围的值无效。" UserInfo=NSDebugDescription=字符 0 周围的值无效。))
那么json格式不正确
您应该打印出您收到的返回的JSON
并发布它,告诉我们您的期望和结果。这样我们就可以知道哪里出了问题。这种方式纯属猜测。
【参考方案1】:
删除responseString
并替换为responseJSON
Alamofire.request(urlUserRegister, method: .post, parameters: parameters, encoding: JSONEncoding.default).responseJSON
if let result = response.result.value as? [String:Any]
if let message = result["message"] as? String
print(message)
【讨论】:
当我这样做时,我得到“无法在 Cast to Dictionary 中推断通用参数“Key””。 我猜是json问题以上是关于收到一条错误消息,提示“从“字符串”转换为不相关的类型 NSDictionary 总是失败”。我得到一个线程 1:EXC_BAD_INSTRUCTION的主要内容,如果未能解决你的问题,请参考以下文章
从 FIRRemoteConfigValue 转换为不相关的字符串类型总是失败:Firebase、Swift