如何在按下按钮时发布 Alamofire JSON 请求?

Posted

技术标签:

【中文标题】如何在按下按钮时发布 Alamofire JSON 请求?【英文标题】:How Do I Post an Alamofire JSON Request on button press? 【发布时间】:2016-03-16 07:24:53 【问题描述】:

我正在尝试构建一个具有登录功能的简单 ios 应用程序,但首先我想制作它,以便在注册时按下“继续”按钮将数据发布到 REST api。由于某种原因,我无法成功地将其绑定到按钮。下面的代码不知道输入框是什么。我ctr+拖动按钮然后添加进去。

import Alamofire
import SwiftyJSON
import UIKit


class SignUpViewController: UIViewController 
    var onButtonTapped : (() -> Void)? = nil

    @IBOutlet weak var usernametextfield: UITextField!
    @IBOutlet weak var passwordtextfield: UITextField!
    @IBOutlet weak var emailtextfield: UITextField!
    @IBOutlet weak var loginMessage: UILabel!

    @IBAction func continueButtonPressed(sender: AnyObject) 

        // POST requests dont need a response!
        Alamofire.request(.POST, endpoint, parameters: inputboxes)

    

    lazy var json : JSON = JSON.null
    let endpoint = "anyapi.com/api/users"

    override func viewDidLoad() 
        digestUser()
    

    func digestUser() 

        let passwordInput = self.passwordtextfield.text
        let usernameInput = self.usernametextfield.text
        let emailInput = self.emailtextfield.text


        let inputboxes: [String:AnyObject] = [
            "hashword": passwordInput!,
            "username": usernameInput!,
            "email": emailInput!
        ]
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    


编辑:Alamofire 无法正常工作,因为我忘记在 URL 前添加:“https://”

【问题讨论】:

嗨@Natu,我认为你的标题有点欺骗性。您似乎遇到了将按钮的操作绑定到方法的问题,而不是 Alamofire 的问题。 据我所知,我对这两个都有问题,而且标题都说,不是吗? 嗨@Natu。根据您的描述,我感觉您只有绑定有问题。如果你有这两个问题,那么标题就可以了。 【参考方案1】:

inputboxes 声明为outlets 下方的实例变量:var inputboxes: [String:AnyObject] = [:],它应该可以工作。

【讨论】:

它仍然没有编译。我的按钮似乎是问题 实际上,它会编译,它只是在我使用此代码到达视图控制器之前发出信号 SIGABT 并在我的手机上停止然后指向我的 appdeligate 文件 检查控制台消息。 关于约束的一些冗长的事情也许我的 UI 只是搞砸了paste.ofcode.org/33rtpnGPz54EuzFArpmjED 问题:** 由于未捕获的异常 'NSUnknownKeyException' 导致应用程序终止,原因:'[ setValue:forUndefinedKey:]:此类不符合键的键值编码继续按钮。'【参考方案2】:
    Alamofire.request(.POST, BASE_URL , parameters: parameters as? [String : AnyObject])
        .responseJSON  response in
            if let JSON = response.result.value 
                    print("Success with JSON: \(JSON)")
                
          

【讨论】:

让参数:NSDictionary = ["key1":"Value1","Key2":"Value2"] 目前两者都不起作用 - 我只是不知道将按钮按下部分放在哪里,这似乎是问题 是你的输入框有数据。请检查,因为从 didload 调用 digestUser() 并且当您在 UITextField 中输入文本时,输入框应该有一些值。【参考方案3】:

尝试在函数外部声明输入框,以便在整个类中都可以访问。

【讨论】:

以上是关于如何在按下按钮时发布 Alamofire JSON 请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何在按下 UIButton 的按钮时关闭按钮阴影?

Android:如何在按下按钮时关闭一个活动并在按下另一个按钮时关闭整个后台堆栈? [复制]

如何在按下按钮后每 10 分钟重复一次方法并在按下另一个按钮时结束它

xctest - 如何测试是不是在按下按钮时加载新视图

Swift - Alamofire Post,如果为真则更改图像

如何防止活动在按下按钮时加载两次