[英]How to update, not reload, UITableView?
我的問題可能看起來很簡單,但沒有用。 我搜索了很多並嘗試了很多方法,但它不起作用!
因此,我有一個UITableView。 在后台,我的一個功能工作並檢測到是否收到新消息,它將此值寫入Core Data,並且我想在收到新消息時在單元格上添加徽章。
但是當我嘗試這個:
func reloadTableView() {
dispatch_async(dispatch_get_main_queue(),{
self.tableView.reloadData()
})
}
它不會更新我的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.