[英]iOS: tableView.reloadData() doesn't work in swift3
我是Swift的新手,我正在尝试在Swift中更新数据后重新加载表格视图,但似乎无法正常工作。 当我更改选项卡并返回时, tableView
会重新加载,但不会自动加载。 这是我的代码:
我的TableViewController:
class AllChannelTableViewController: UITableViewController {
var modelChannel = [AllCnannelModel]()
let realm = try! Realm()
lazy var channels: Results<ChannelData> = { self.realm.objects(ChannelData.self) }()
override func viewDidLoad() {
super.viewDidLoad()
defaultChannel()
}
func defaultChannel() {
if channels.count == 0 {
SVProgressHUD.show(withStatus: "dowload")
let URL = "http://52.50.138.211:8080/ChanelAPI/chanels"
Alamofire.request(URL).responseArray { (response: DataResponse<[AllCnannelModel]>) in
let channelArray = response.result.value
if let channelArray = channelArray {
for channel in channelArray {
try! self.realm.write() {
let newChannel = ChannelData()
newChannel.category_id = channel.category_id!
newChannel.idChannel = channel.id!
print(newChannel.idChannel)
newChannel.name = channel.name!
print(newChannel.name)
newChannel.picture = channel.picture
newChannel.url = channel.url!
print(newChannel.url)
self.realm.add(newChannel, update: true)
}
}
}
}
DispatchQueue.main.async{
self.tableView.reloadData()
self.channels = self.realm.objects(ChannelData.self)
}
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// self.tableView.reloadData()
return self.channels.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! AllChannelTableViewCell
let strUrl = channels[indexPath.row].picture
cell.nameChannel.text = self.channels[indexPath.row].name
cell.urlChannel.text = self.channels[indexPath.row].url
cell.imageChannel.downloadFrom(url: URL(string: strUrl)!)
SVProgressHUD.dismiss()
return cell
}
}
设置datasource
数组后,需要重新加载tableView
。 另外,您当前正在在Alamofire
块外部重新加载tableView
,但它应该在Alamofire
请求块内部。 因此,以这种方式更改重新加载代码。
func defaultChannel() {
if channels.count == 0 {
SVProgressHUD.show(withStatus: "dowload")
let URL = "http://52.50.138.211:8080/ChanelAPI/chanels"
Alamofire.request(URL).responseArray { (response: DataResponse<[AllCnannelModel]>) in
let channelArray = response.result.value
if let channelArray = channelArray {
for channel in channelArray {
try! self.realm.write() {
let newChannel = ChannelData()
newChannel.category_id = channel.category_id!
newChannel.idChannel = channel.id!
print(newChannel.idChannel)
newChannel.name = channel.name!
print(newChannel.name)
newChannel.picture = channel.picture
newChannel.url = channel.url!
print(newChannel.url)
self.realm.add(newChannel, update: true)
}
}
}
DispatchQueue.main.async{
//First set array
self.channels = self.realm.objects(ChannelData.self)
//Now reload the tableView
self.tableView.reloadData()
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.