iOS:tableView.reloadData() 在 swift3 中不起作用
Posted
技术标签:
【中文标题】iOS:tableView.reloadData() 在 swift3 中不起作用【英文标题】:iOS: tableView.reloadData() doesn't work in swift3 【发布时间】:2017-02-05 13:56:38 【问题描述】:我是 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
【问题讨论】:
DispatchQueue.main.async...
在收到 Web 服务响应之前被调用。将其移动到 Alamofire
块内(在关闭 Alamofire
之前。
【参考方案1】:
设置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()
【讨论】:
以上是关于iOS:tableView.reloadData() 在 swift3 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
iOS:tableView.reloadData() 在 swift3 中不起作用
使用 tableView.reloadData() 重新加载 TableView 的问题
Swift:tableView.reloadData() 太慢了