在 viewDidLoad 之前执行一个函数
Execute a function before viewDidLoad
此视图将提出一组问题。这些问题将从 api 中读取。我有两种方法可以在最后一个视图中加载它们,也可以在当前视图中但在 viewDidLoad 方法之前加载它们。我尝试了 viewWillAppear 但效果不佳。我该怎么做?
编辑:
这是从api读取数据的函数:
func readData(id: String, userCompletionHandler: @escaping ([String], Error?) -> Void){
let request = NSMutableURLRequest(url: NSURL(string: "http://adminsapi.somee.com/Api/Test/?id=\(id)")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
request.httpMethod = "GET"
var questionArr = [String]()
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: {
(data, response, error) in
if response != nil {
//print("Response: \(response!)")
}
if let data = data {
do{
self.questionObject = try JSONDecoder().decode([Questions].self, from: data)
for question in self.questionObject{
questionArr.append(question.question)
}
userCompletionHandler(questionArr, nil)
} catch{
print("Error in retrieving data: \(error)")
}
}
else{
print("Error: \(String(describing: error))")
}
})
dataTask.resume()
}
这是我导航到下一个视图控制器的地方:
func moveToNextVC(finalString: String){
let VC1 = self.storyboard?.instantiateViewController(withIdentifier: "QuestionsTableViewController") as? QuestionsTableViewController
if finalString.lowercased().contains("abdominal distention"){
readData(id: "1", userCompletionHandler: { data, error in
VC1?.questions = data
})
self.present(VC1!, animated: true, completion: nil)
}
}
The problem is when I print the questions array in "QuestionsTableViewController" it is always empty
从左到右顺序
loadView -> viewDidLoad -> viewWillAppear
没有足够的时间在 loadView
中执行此操作,您需要在之前的 vc 中加载 api 然后显示所需的 1 ,或进行调用里面 viewDidLoad
此视图将提出一组问题。这些问题将从 api 中读取。我有两种方法可以在最后一个视图中加载它们,也可以在当前视图中但在 viewDidLoad 方法之前加载它们。我尝试了 viewWillAppear 但效果不佳。我该怎么做?
编辑:
这是从api读取数据的函数:
func readData(id: String, userCompletionHandler: @escaping ([String], Error?) -> Void){
let request = NSMutableURLRequest(url: NSURL(string: "http://adminsapi.somee.com/Api/Test/?id=\(id)")! as URL, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 10.0)
request.httpMethod = "GET"
var questionArr = [String]()
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: {
(data, response, error) in
if response != nil {
//print("Response: \(response!)")
}
if let data = data {
do{
self.questionObject = try JSONDecoder().decode([Questions].self, from: data)
for question in self.questionObject{
questionArr.append(question.question)
}
userCompletionHandler(questionArr, nil)
} catch{
print("Error in retrieving data: \(error)")
}
}
else{
print("Error: \(String(describing: error))")
}
})
dataTask.resume()
}
这是我导航到下一个视图控制器的地方:
func moveToNextVC(finalString: String){
let VC1 = self.storyboard?.instantiateViewController(withIdentifier: "QuestionsTableViewController") as? QuestionsTableViewController
if finalString.lowercased().contains("abdominal distention"){
readData(id: "1", userCompletionHandler: { data, error in
VC1?.questions = data
})
self.present(VC1!, animated: true, completion: nil)
}
}
The problem is when I print the questions array in "QuestionsTableViewController" it is always empty
从左到右顺序
loadView -> viewDidLoad -> viewWillAppear
没有足够的时间在 loadView
中执行此操作,您需要在之前的 vc 中加载 api 然后显示所需的 1 ,或进行调用里面 viewDidLoad