未将对象引用设置为iOS中的对象实例

时间:2019-01-29 11:40:40

标签: ios swift api alamofire

当我从iOS使用Alamofire调用api时出现错误-

  

对象引用未设置为对象的实例

所有其他API都可以正常工作。不知道它是来自后端。

我调试它并使用po命令检查日志,但是所有参数都随请求而变化。

有人可以提出解决方案吗?

任何快速帮助将不胜感激。

谢谢

代码如下:

let strToken: String = (USER_DEFAULT.value(forKey: "token") as? String)!
    let strQuerystring = "token=" + strToken
    let parameters: [String: String] = ["FirstName": txtFirstName.text!, "LastName":txtLastName.text!,"Gender":txtGender.text!,"DOB":strDate,"RelationId":strMemberID]

    callPostApi(fileName: postAddMember + strQuerystring, parameters: parameters) { responseObject, errorResponse in
        if(errorResponse == nil)
        {
            if let json = responseObject as? NSDictionary
            {
                let strStatus: Bool = json.value(forKey: "Status") as! Bool
                let strMessage: String = json.value(forKey: "Message") as! String
                if(strStatus == true)
                {
                    forAlert(strMessage)
                    _ = self.navigationController?.popViewController(animated: true)
                }
                else
                {
                    forAlert(strMessage)
                }
            }
            else
            {
                forAlert("noResponseMessage".localized)
            }
        }
        else
        {
            forAlert("noResponseMessage".localized)
        }
        SKActivityIndicator.dismiss()
    }
}

3 个答案:

答案 0 :(得分:0)

响应对象不是json,在将值分配给它们各自的变量之前,您需要先对其进行序列化。 像这样的东西:

guard let dictionary = try? JSONSerialization.jsonObject(with:responseObject!,options: []) as! [String: AnyObject] else { return }

希望有效。

答案 1 :(得分:0)

您需要使URLRequest与正文中的参数保持一致,如数据

并按如下所示创建请求:

    let auth = "Bearer"+token // or your Authorization type
    let url = URL.init(string:urlString)
    var request = URLRequest(url: url!)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.setValue(auth, forHTTPHeaderField: "Authorization")
    request.httpBody = try! JSONSerialization.data(withJSONObject: parameters)
    Alamofire.request(request)
           .responseJSON { response in
            // Handling your data 
    }

尝试一下,希望对您有所帮助。

您可以看到: How to post nested json by SwiftyJson and Alamofire?

另请参阅:Using manager.request with POST

答案 2 :(得分:0)

您不需要序列化parameters。在Alamofire Docs中,参数的类型必须为Parameters

let parameters: Parameters = [
    "foo": "bar",
    "baz": ["a", 1],
    "qux": [
        "x": 1,
        "y": 2,
        "z": 3
    ]
]

在您的情况下,import Alamofire,然后像这样声明parameters,不要序列化它。:

 let parameters: Parameters = [
        "FirstName": txtFirstName.text!,
        "LastName":txtLastName.text!,
        "Gender":txtGender.text!,
        "DOB":strDate,
        "RelationId":strMemberID
    ]