我有一个基于视图的NSTableView
我支持 `NSMutableArray 。定期我出去抓取一些数据并想在顶部的表中插入新行。
当我在没有指定动画的情况下执行此操作时,insertRowsAtIndexes:withAnimation:
它似乎可以连续几个小时正常工作。但是,如果我指定动画,大约 7 或 8 次插入后,表格视图开始显示插入发生的空白行。向下滚动然后向上滚动会导致新行正确呈现。
调用的代码insertRowsAtIndexes:withAnimation
在一个块中,而不是在主线程上运行,但我的插入发生在主队列的 dispatch_async 内部,所以我不认为它与多线程有关。
这是一些代码......self.contents
是我的NSMutableArray
.
dispatch_async(dispatch_get_main_queue(), ^{
[self.contentsTableView beginUpdates];
if(posts.count) {
for(NSDictionary* dictionary in [posts reverseObjectEnumerator]) {
FNPost* post = [[FNPost alloc] initWithDictionary:dictionary width:self.contentsTableView.frame.size.width];
post.delegate = self;
[self.contents insertObject:post atIndex:0];
[self.contentsTableView insertRowsAtIndexes:[NSIndexSet indexSetWithIndex:0] withAnimation: NSTableViewAnimationSlideLeft];
}
}
[self.contentsTableView endUpdates];
});
我感到困惑的一件事是AppleNSTableView
文档的一部分insertRowsAtIndexes:withAnimation
说:
表视图中的 numberOfRows 将自动减少索引计数。
我对该语句所暗示的关于我的数组中的对象数(以及因此的结果numberOfRowsInTableView:
)与表视图认为它具有的行数之间的关系感到困惑。在我看来,表格视图中的行数应该等于我的数组计数,我想确保我对此的理解不是问题的根源,但就像我说的那样,如果没有指定动画,表格可以正常工作。
我在这里做明显错误的事情吗?