喜歡StackOverflow的朋友。TableView無效更新
我在我的應用程序上有一個聊天屏幕,我根據數組的實際大小執行插入和刪除操作。看看這個:
func addObject(object: Object?) {
if comments == nil || object == nil || object?.something == nil || object?.anything == nil {
return
}
self.objectsTableView.beginUpdates()
if self.objects!.count == 10 {
self.objects?.removeAtIndex(9)
self.objectsTableView.deleteRowsAtIndexPaths([NSIndexPath(forRow : 9, inSection: 0)], withRowAnimation: .Right)
}
self.objects?.insert(object!, atIndex: 0)
self.objectsTableView.insertRowsAtIndexPaths([NSIndexPath(forRow : 0, inSection: 0)], withRowAnimation: .Right)
self.objectsTableView.endUpdates()
}
但經過一些壓力測試,日誌通知:
無效更新:在第0行的數目無效的包含在現有的部分更新後 行數(1)必須爲 ,其等於 更新(10)之前該部分中包含的行數,加上或減去從 插入或刪除的部分(插入1個,刪除0)以及加或減的行數移入或移出該部分的行數爲 (0移入,0搬出)。
我不知道發生了什麼,只有當對象的插入非常極端時纔會發生這種情況,例如每0.2秒一次。
有人知道我可以做嗎?
是否要更新在多個線程中的'self.objects'數組:
該添加對象的方法? Swift數組不是線程安全的,所以你應該採取適當的預防措施,以precent併發更新 – Paulw11
我使用這個:https://gist.github.com/ppamorim/845517fed6bec0fd41ff –
所以是的,你是。你需要保護你的數組更新 - 請參閱馬特橋樑在這裏回答 - http://stackoverflow.com/questions/24045895/what-is-the-swift-equivalent-to-objective-cs-synchronized(不是接受的答案) – Paulw11