快速问题:我正在使用Alamofire库在我的数据库中注册一个用户。我从后端开发人员那里获得了端点和参数,并亲自在Postman中对其进行了测试,数据通过得很好。我正在我的寄存器视图控制器中实现它,但一直没有得到响应。下面是我的实现。仅供参考:我离开了视图控制器的用户类型。最终用户不应该知道他们是用户类型3。我可能在这里做错了什么。我在输出中没有得到任何响应。
let params = ["username":usernameField.text!,
"firstname":firstNameField.text!,
"lastname":lastNameField.text!,
"password":passwordField.text!,
"usertype":"3",
"email":emailAddressField.text!
]
let apiMethod = "http://api.example.com"
Alamofire.request(apiMethod, method: .post, parameters: params, encoding: URLEncoding.default).responseString { (response) in
print(response);
let alertController = UIAlertController(title: "REGISTRATION SUCCESSFUL!", message: nil, preferredStyle: .alert);
alertController.addAction(UIAlertAction(title: "OK", style: .default,handler: nil));
self.present(alertController, animated: true, completion: nil)
}
}
if let json = response.result.value as? Dictionary<String, String> {
print ("JSON: \(json)")
if (json["register_status"]! == "userExist") {
return
} else {
self.performSegue(withIdentifier: "registerSuccess", sender: self)
}
}一旦用户正确注册,我的响应应该是:
{
"username": "userregister",
"register_status": "RegistrationComplete",
"register_date": "11/10/2016"
}但如果用户存在,我将得到以下消息:
{
"username": "userregister",
"register_status": "userExist",
"register_date": "11/10/2016"
}我在我的Swift 3代码中做错了什么?
编辑(添加寄存器视图控制器)以保持清晰:

发布于 2016-11-11 03:08:46
如果您的响应是JSON,我会这样做。这将帮助您调试代码。另外,我建议你在控制台中设置断点并检查响应。
Alamofire.request(apiMethod, method: .post, parameters: params, encoding: URLEncoding.default).responseJSON {response in
var err:Error?
switch response.result {
case .success(let json):
print(json)
// update UI on main thread
DispatchQueue.main.async {
let alertController = UIAlertController(title: "REGISTRATION SUCCESSFUL!", message: nil, preferredStyle: .alert);
alertController.addAction(UIAlertAction(title: "OK", style: .default,handler: nil));
self.present(alertController, animated: true, completion: nil)
}
case .failure(let error):
err = error
print(err)
}
}如果这对您没有帮助,请分享您的rest客户端请求有效负载,以便我可以进一步帮助您。
发布于 2016-11-11 03:01:42
您的回调是在另一个线程上进行的,因此您需要将警报控制器表示调用包装在DispatchQueue.main.async块中,因为所有ui都需要发生在主线程上,否则可能会出现奇怪的绘图/计时错误。
无论如何,这可能不是你的请求的问题。您正在发出http请求,从iOS 9开始,该请求在默认情况下被禁用。您需要在info.plist文件中显式设置应用传输安全密钥。你可以在苹果的documentation中看到这些值。我猜你可能同时想要NSAllowsArbitraryLoads和NSExceptionAllowsInsecureHTTPLoads。
发布于 2016-11-12 02:17:31
感谢你昨天在@hacker_1989 @Josh @Aaron上的帮助。我对使用Alamofire Library和Swift 3语言的用户注册的解决方案如下:
@IBAction func registerTappedButton(_ sender: Any) {
if(userNameField.text == nil || (userNameField.text?.isEmpty)!) {
self.showAlertError("Username required", message: "")
return
}
if(firsNameField.text == nil || (firsNameField.text?.isEmpty)!) {
self.showAlertError("First Name required", message: "")
return
}
if(lastNameField.text == nil || (lastNameField.text?.isEmpty)!) {
self.showAlertError("Last Name required", message: "")
return
}
if(passwordField.text == nil || (passwordField.text?.isEmpty)!) {
self.showAlertError("Password required", message: "")
return
}
if(emailAddressField.text == nil || (emailAddressField.text?.isEmpty)!) {
self.showAlertError("Email Address required", message: "")
}
let params = ["username": userNameField.text!,
"firstname": firsNameField.text!,
"lastname": lastNameField.text!,
"password": passwordField.text!,
"usertype": 3,
"email": emailAddressField.text!] as [String : Any]
let apiMethod = "http://api.example.com" //<-Set your endpoint here
Alamofire.request(apiMethod, method: .post, parameters: params, encoding: JSONEncoding.default).responseString { (response) in
print(response);
let alertController = UIAlertController(title: "REGISTRATION SUCCESSFUL!", message: nil, preferredStyle: .alert);
alertController.addAction(UIAlertAction(title: "OK", style: .default,handler: nil));
self.present(alertController, animated: true, completion: nil)
}
}后端开发人员将终结点更改为期望JSON对象。他之前曾将端点设置为期望URL编码的参数。
现在一切都很好。数据正在成功传递。
https://stackoverflow.com/questions/40534102
复制相似问题