簡體   English   中英

如何更新而不是重新加載UITableView?

[英]How to update, not reload, UITableView?

我的問題可能看起來很簡單,但沒有用。 我搜索了很多並嘗試了很多方法,但它不起作用!

因此,我有一個UITableView。 在后台,我的一個功能工作並檢測到是否收到新消息,它將此值寫入Core Data,並且我想在收到新消息時在單元格上添加徽章。

但是當我嘗試這個:

func reloadTableView() {
    dispatch_async(dispatch_get_main_queue(),{
        self.tableView.reloadData()
    })
}

它不會更新我的tableView,也不會顯示新徽章。 為此,我需要:

  1. 更換我的控制器並返回
  2. 或者我需要將tableView拖到頂部並保留它

在這種情況下,它將顯示我的徽章。

因此,如何更新我的tableView以顯示新添加的徽章,而無需上述兩種方法?

UPDATE

在此處輸入圖片說明

更新2

我有2個文件:ContactsTableViewController和Messages.swift。

在我的Messages.swift中,我處理新消息,當收到新消息時,我會記錄在日志中:

print("New message for \(user.jidStr)")
ContactsTableViewController().reloadTableView()

在我的ContactsTableViewController中:

func reloadTableView() {
    self.tableView.reloadData()
    print("updated")
}

當我在日志中獲取updated消息時,它會重新加載tableView,但不會更新它和我的徽章

嘗試僅使用以下方法更新收到新消息的單元:

self.tableView.beginUpdates()
self.tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: row, inSection: section)], withRowAnimation: UITableViewRowAnimation.Fade)
self.tableView.endUpdates()

where row接收消息的單元格所在部分的行

Objective-C中的示例:

[_tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];

Swift 2.0中的示例:

self.tableView.reloadRowsAtIndexPaths([NSIndexSet, indexSetWithIndex:0], withRowAnimation: UITableViewRowAnimation.Automatic)

您嘗試過NSOperationQeue嗎?

func reloadTableView() {
  NSOperationQueue.mainQueue().addOperationWithBlock {
        self.tableView.reloadData()
    })
}         

編輯(因為我無法發表評論)

override func viewDidLoad() { NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "reloadTableView", userInfo: nil, repeats: true) }

如果您使用的是這樣的東西,則每秒調用一次update函數,這沒有任何意義。 您應該在獲取數據后調用它

reloadData應該可以工作...(我認為最好在主線程上調用它。)

您是否檢查過對象數組是否正確? 如果它來自CoreData請求,則可以使用緩存。 確保已同步CoreDataContext(通過在插入后在上下文上調用save方法),並且獲取操作返回了最后創建的對象。

只是一個猜測...

暫無
暫無

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

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