我在第一个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}},这对我的应用来说有点问题!我如何决定这两个功能之间的优先级。
答案 0 :(得分:0)
你必须考虑你想要发生什么。显然,Alamofire的召唤需要一些时间。在那个时间过去之后,你想对第二个VC做什么?如果电话根本没有回复,你想做什么?
这是依赖外部资源时的常见问题。你如何管理用户界面?您是否以部分状态呈现UI?你把popover说成“装载”之类的东西吗?或者你是否等到资源完成才提交第二个VC?
我们无法为您做出决定,因为这取决于您的要求。但是,有一些方法可以实现每一个。如果资源通常响应很快,您可以将VC显示为部分状态,然后在某种回调上填充它。通常,回调是(1)块(2)委托方法或(3)通知。还有(不太常见的)(4)KVO。您应该研究每种方法的优缺点。