簡體   English   中英

在主線程上調用tableView.reloadData后,UITableView不刷新

[英]UITableView not refreshing after calling tableView.reloadData on main thread

更新:我對let vc = viewControllers(for: self)調用返回了錯誤的值,因此未觸發更新。

我正在嘗試使用tableView.reloadData方法更新UITableView ,但是它沒有觸發更新?

單擊搜索結果時,從父視圖控制器調用selectAndHighlight時,應該進行更新

我四處搜尋,據我所知,我需要在主線程上調用更新,所以我已經做到了,但是我仍然沒有得到任何更新?

從長遠來看,我可能只想更新一個單元格,但就目前而言,我只想更新任何東西,這是行不通的。 重新加載命令期間,我的打印語句沒有日志輸出。

當我從屏幕上滾動內容然后重新打開時,新內容正確存在,因此數據正在正確同步,只是沒有更新。

import UIKit
import RealmSwift
import XLPagerTabStrip

class ArtistViewControllerTableViewController: UITableViewController, IndicatorInfoProvider {

open var stageName = ""

var artists: Results<Artist>!

override func viewDidLoad() {

    let realm = try! Realm()

    artists = try! realm.objects(Artist.self).filter("stageName = '" + stageName + "'")

    super.viewDidLoad()
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "ArtistCell", for: indexPath)
    as! ArtistCellTableViewCell

    let artist = artists[indexPath.row] as Artist

    cell.artist = artist

    print ("updating " + artist.artistName)

    return cell
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    print("Artist Clicked")
}

open func selectAndHighlight(artist: Artist) {

    print (stageName)

    DispatchQueue.main.async {

        let realm = try! Realm()

        try! realm.write {
            artist.artistName = "new name"
        }

        self.tableView.reloadData()

    } 
}  

override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return artists.count
}

func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
    return IndicatorInfo(title: stageName)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

單擊搜索結果后,該擴展名最終調用SelectAndHighlight方法。

extension ParentViewController: HandleSearchResultClick{
func select(artist: Artist) {
    print(artist.artistName + " clicked")
    var x = 0

    let vc = viewControllers(for: self)
    let table = vc[x] as? ArtistViewControllerTableViewController
    table?.selectAndHighlight(artist: artist)     
}
}

在調用tableView.reloadData()之前嘗試調用以下func

func refreshArtistsObj(){
    let realm = try! Realm()
    artists = try! realm.objects(Artist.self).filter("stageName = '" + stageName + "'")
}

問題是向RealmDB添加價值后,您需要獲取更新的價值並再次更新Artist對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM