程序打开是一个 UITableView, 在 TableViewController 的 viewDidLoad()函数中构造类 Series 的对象并保存在外部数组中。
class SeriesTableViewController: UITableViewController {
var seriesArray = [Series]()
override func viewDidLoad() {
super.viewDidLoad()
loadSampleSeries()
}
func loadSampleSeries() {
let photo1 = UIImage(named:"WestWorld")
let name1 = "西部世界 WestWorld"
let url1 = "http://www.zimuzu.tv/resource/index_json/rid/33701/channel/tv"
let series1 = Series(name: name1, photo: photo1, zimuzuJsonUrl: url1)
seriesArray.append(series1)
}
... ...
}
Series 的构造函数会调用 URLSession.shared.dataTask(), 在 dataTask 的闭包中对返回的 data 进行解析然后赋值给类 Series 的成员。
class Series {
var nextDate: String = ""
var nextTime: Int = 0
...
...
init( ... ... ) {
let task = URLSession.shared.dataTask(with: request) {
(data, response, error) -> Void in
...
...
self.nextTime = ...
self.nextDate = ...
}
}
task.resume()
}
...
...
}
但是发现 URLSession.shared.dataTask 并没有在构造函数中马上被执行,直到 UITableViewController 调用了 UITableViewDataSource 后才执行并对 Series 的对象赋值。导致 TableView 中无法显示正确的数据。
在控制台打印发现各个函数的执行顺序是这样的:
didFinishLaunchingWithOptions
viewDidLoad()
Series.init()
tableView() -> UITableViewCell
URLSession.shared.dataTask()
问题是:
1
HannibaI OP |
2
loveuqian 2016-11-25 12:14:50 +08:00 via iPhone 1
那是一个异步 block 吧
可能你需要在 block 里 reload 一下 table ? |
4
dsmo 2016-11-30 16:31:31 +08:00 1
swift 里叫闭包, oc 里是 block
|