对象引用未设置为iOS中对象的实例
当我从iOS使用Alamofire调用api时,出现错误- 对象引用未设置为对象的实例 所有其他API都工作正常。不知道它是否来自后端 我调试它并用po命令检查日志,但所有参数都随请求进行 有人能提出解决办法吗 任何快速的帮助都将不胜感激 谢谢 代码如下:对象引用未设置为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
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中工作正常,那么您要么发送了错误的参数、错误的值,要么发送了错误的格式