Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对象引用未设置为iOS中对象的实例_Ios_Swift_Api_Alamofire - Fatal编程技术网

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

对象引用未设置为iOS中对象的实例,ios,swift,api,alamofire,Ios,Swift,Api,Alamofire,当我从iOS使用Alamofire调用api时,出现错误- 对象引用未设置为对象的实例 所有其他API都工作正常。不知道它是否来自后端 我调试它并用po命令检查日志,但所有参数都随请求进行 有人能提出解决办法吗 任何快速的帮助都将不胜感激 谢谢 代码如下: let strToken: String = (USER_DEFAULT.value(forKey: "token") as? String)! let strQuerystring = "token=" + strToken

当我从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()
    }
}

响应对象不是
json
,您需要先将其序列化,然后再将值分配给相应的变量。 大概是这样的:

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

希望能奏效。

您需要将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 
    }
试试这个,希望对你有帮助

你可以看到:


另请参见:

您不需要序列化
参数。From参数必须是
参数类型

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

在您的情况下,
导入Alamofire
,然后像这样声明
参数
,不要序列化它:

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

你能不能请一些代码,以便更好地理解它听起来像是来自你的后端,可能是一个.Net API。您需要检查您的参数、API文档等。您可以使用其他一些工具,如Postman(chrome应用程序)发出相同的API请求并进行测试。如果你犯了同样的错误,那与你无关iOS@Scriptable-谢谢你的回复。我从斯威夫特那边检查所有的东西。这是api,与邮递员配合良好。我还与后端开发人员讨论了这一点。他否认自己没有改变任何事情。您确定它不是来自swift端吗?如果错误在
strMessage
中,则它是后端。若应用程序崩溃并且错误出现在控制台中,那个么它将在iOS中崩溃,这可能仍然是因为API上发生了一些变化。“对象引用未设置为对象实例”是C#和其他语言中的常见错误。如果它在Swift中,则会意外地发现“零”
,如果它在Postman中工作正常,那么您要么发送了错误的参数、错误的值,要么发送了错误的格式