【发布时间】:2016-12-14 13:26:16
【问题描述】:
我在第一个 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) IBAction 的 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.")
}
}
}
现在,每当我按下按钮时,它都会在 IBAction 或 FirstVC 之前调用 viewDidLoad 或 SecondVC,这对我的应用程序来说有点问题!我如何确定这两个功能之间的优先级。
【问题讨论】:
-
你把它链接到
Storyboard了吗?总是首先调用 viewDidLoad 方法。因为它是生命周期VC -
延迟的主要原因是
Alamofire请求的异步行为。无论如何,强烈建议您不要使用UserDefaults在控制器之间传递数据 -
您不应该关注调用这些函数的顺序。你应该以这样的方式编写它们,使得它们被调用的顺序不重要
-
1) 你的问题毫无意义。按下
FirstVC中的按钮与SecondVC有什么关系?buttonPressed中没有创建或加载SecondVC的代码。 2)不要使用UserDefaults来存储数据。那不是它的目的。 3) 不要无谓地拨打synchronize。