谁先来了? IBAction或ViewDidLoad

时间:2016-12-14 13:26:17

标签: ios json swift

我在第一个VC上有一个Button,它指向两个活动状态。

1)SecondVC

override func viewDidLoad() {
    super.viewDidLoad()
    subjectPickerView.dataSource = self
    subjectPickerView.delegate = self
    SwiftyRequest()
    // Used the text from the First View Controller to set the label
}

func SwiftyRequest(){
    print("SecondViewController METHOD BEGINS")
    let jsonobj = UserDefaults.standard.object(forKey: "PostData")
    let json = JSON(jsonobj as Any)
        for i in 0 ..< json.count{
            let arrayValue = json[i]["name"].stringValue
            print(arrayValue)
            self.subjects.append(arrayValue)
            self.subjectPickerView.reloadAllComponents()
        }
    print(self.subjects)
}

2)IBAction的{​​{1}}

FirstVC

现在,每当我按下按钮时,它会在@IBAction func buttonPressed(_ sender: Any) { Alamofire.request("http://localhost/AIT/attempt3.php",method: .post, parameters: ["something": semValue, "branch" : streamValue]) .responseJSON { response in print(response.result) if let JSON1 = response.result.value { print("Did receive JSON data: \(JSON1)") // JSONData.someData = JSON1 as AnyObject? UserDefaults.standard.set(JSON1, forKey: "PostData") UserDefaults.standard.synchronize() } else { print("JSON data is nil.") } } } viewDidLoad之前调用SecondVC的{​​{1}},这对我的应用来说有点问题!我如何决定这两个功能之间的优先级。

1 个答案:

答案 0 :(得分:0)

你必须考虑你想要发生什么。显然,Alamofire的召唤需要一些时间。在那个时间过去之后,你想对第二个VC做什么?如果电话根本没有回复,你想做什么?

这是依赖外部资源时的常见问题。你如何管理用户界面?您是否以部分状态呈现UI?你把popover说成“装载”之类的东西吗?或者你是否等到资源完成才提交第二个VC?

我们无法为您做出决定,因为这取决于您的要求。但是,有一些方法可以实现每一个。如果资源通常响应很快,您可以将VC显示为部分状态,然后在某种回调上填充它。通常,回调是(1)块(2)委托方法或(3)通知。还有(不太常见的)(4)KVO。您应该研究每种方法的优缺点。