gpt4 book ai didi

cocoa - 基于 View 的 NSTableView 在插入带有动画的新行后渲染空白行

转载 作者:行者123 更新时间:2023-12-03 16:21:32 26 4
gpt4 key购买 nike

我有一个基于 View 的 NSTableView,我用 `NSMutableArray 来支持它。我定期出去获取一些数据,并希望将新行插入到顶部的表中。

当我在没有为 insertRowsAtIndexes:withAnimation: 指定动画的情况下执行此操作时,它似乎可以连续工作几个小时。但是,如果我指定动画,则在大约 7 或 8 次插入后, TableView 开始显示发生插入的空白行。向下滚动然后向上滚动会导致新行正确呈现。

调用 insertRowsAtIndexes:withAnimation 的代码位于一个 block 中,并且不在主线程上运行,但我的插入发生在主队列上的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];

});

我感到困惑的一件事是 Apple NSTableView 文档中 insertRowsAtIndexes:withAnimation 的部分内容:

The numberOfRows in the table view will automatically be decreased by the count of indexes.

我对该语句所暗示的关于数组中的对象数量(以及 numberOfRowsInTableView: 的结果)与 TableView 认为它具有的行数之间的关系感到困惑。根据我的想法, TableView 中的行数应该等于我的数组计数,我想确保我对此的理解不是问题的根源,但就像我说的,如果没有指定动画,表可以正常工作。

我在这里做了明显错误的事情吗?

最佳答案

这个问题是由于 NSTableView 位于基于图层的 View 层次结构中引起的。两个 super View ,我有一个分层 View 。在阅读了一些关于 NSTableView 的其他文章后,在层支持的层次结构中显示了其他错误行为,我决定关闭 IB 中的层。现在,表格动画正如我所期望的那样发生,但当我想在 View 之间使用 CA 转换时,必须维护一些额外的状态来控制图层支持状态。

关于cocoa - 基于 View 的 NSTableView 在插入带有动画的新行后渲染空白行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11976540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com