收到一条错误消息,提示“从“字符串”转换为不相关的类型 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 错误信息明确指出resultString 而不是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

运行“npm run build”时,我收到一条错误消息“无法识别‘CI’”

为什么我总是收到带有React Router的错误消息

将类型 X 的值隐式强制转换为不相关的类型 X

尝试从列表中提取字符 [关闭]

将 Number 类型的值隐式强制转换为不相关的类型 flash.display:MovieClip