【发布时间】:2016-05-28 06:27:59
【问题描述】:
StackOverflow 的朋友们好。
我的应用程序上有一个聊天屏幕,它根据数组的实际大小执行插入和删除。看这个:
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) 后包含在现有节中的行必须是 等于该节之前包含的行数 update (10),加上或减去插入或删除的行数 该部分(插入 1 个,删除 0 个)并加上或减去数量 移入或移出该部分的行(0 移入,0 移出)。
我不知道发生了什么,只有在插入对象非常极端时才会发生这种情况,例如每 0.2 秒插入一个。
有人知道我能做到吗?
【问题讨论】:
-
您是否在多个线程中更新
self.objects数组? Swift 数组不是线程安全的,所以你应该采取适当的预防措施来预防并发更新 -
所以是的,你是。您需要保护您对阵列的更新 - 请参阅此处的 Matt Bridges 答案 - stackoverflow.com/questions/24045895/…(不是公认的答案)
-
不工作。在 Array 的 145 项上崩溃。
-
好吧,您问题中的原始崩溃消息表明该数组是空的(嗯,它有一个项目),而它预期有 10 个,所以看看你可能在哪里更新数组
标签: ios uitableview tableviewcell