谁先来?IBAction 或 ViewDidLoad



我在第一个VC上有一个按钮,它被定向到两个活动状态。

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)FirstVCIBAction

@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.")
}
}
}

现在,每当我按下按钮时,它都会在IBActionFirstVC之前调用SecondVCviewDidLoad,这对我的应用程序来说有点问题!我如何确定这两个功能之间的优先级。

你必须考虑你想要发生的事情。显然,阿拉莫火的电话需要一些时间。在这段时间过去的时候,你想用第二个VC做什么?如果呼叫根本不返回,您想怎么做?

这是依赖外部资源时的常见问题。如何管理 UI?是否以部分状态呈现 UI?你放一个弹出框说"加载"之类的东西吗?还是在呈现第二个 VC 之前等待资源完成?

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

最新更新