【发布时间】:2016-11-19 18:43:42
【问题描述】:
我正在 iOS 中制作应用程序,一切进展顺利,但有一个我无法修复的错误。当用户第一次启动应用程序时,应用程序从我的服务器请求一个 json。读取 json 时,我会在选择器视图中显示结果。问题是在用户触摸屏幕之前,pickerview 总是显示为空。我已经尝试了很多东西,但没有任何效果。理论上它是空的,因为 json 还没有被读取,但事实并非如此,因为在控制台中我可以看到 json 已经准备好。
以下是相关代码:
override func viewDidLoad() {
super.viewDidLoad()
warning.isHidden = true
self.codeInput.delegate = self;
DispatchQueue.main.async {
self.readJson()
self.picker.reloadAllComponents()
}
}
以及我阅读 json 的部分
func readJson(){
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL)
let session = URLSession.shared
let task = session.dataTask(with: urlRequest as URLRequest, completionHandler: {
(data, response, error) -> Void in
let httpResponse = response as! HTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
print("Everyone is fine, file downloaded successfully.")
do{
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:AnyObject]
if let events = json["events"] as? [[String: AnyObject]] {
for event in events {
//here I read the json and I save the data in my custom array
}
self.picker.reloadAllComponents()
}
print(self.eventsArray)
}
}catch {
print("Error with Json: \(error)")
}
}
else{
print(statusCode)
}
})
picker.reloadAllComponents()
task.resume()
}
【问题讨论】:
-
self.picker.reloadAllComponents() 在您的方法 readJson 的调度主队列中添加这一行