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];
});
私が混乱していることの1つは、AppleのNSTableView
ドキュメントの次の部分ですinsertRowsAtIndexes:withAnimation
。
テーブル ビューの numberOfRows は、インデックスの数だけ自動的に減少します。
numberOfRowsInTableView:
配列内のオブジェクトの数(したがって の結果)とテーブルビューが持っていると考える行の数との関係について、そのステートメントが何を意味するのか、私は混乱しています。私の考えでは、テーブルビューの行数は配列数と等しくなければならず、これについての私の理解が問題の根本にないことを確認したいのですが、アニメーションが指定されていない場合、テーブルは正常に機能します。
ここで明らかに間違ったことをしていますか?