2012-08-15 68 views
3

我有一個基於視圖的NSTableView,我用一個「NSMutableArray」支持。我定期出去抓取一些數據,並希望將新行插入頂部的表中。基於視圖的NSTableView在用動畫插入新行後呈現空白行

當我這樣做沒有指定動畫到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]; 

      }); 

有一件事我感到困惑的是蘋果NSTableView文件爲insertRowsAtIndexes:withAnimation的一部分,上面寫着:

表視圖的numberOfRows會自動 索引的數量減少。

我用什麼語句意味着有關對象的數量之間在我的陣列和表視圖認爲它有行數的關係(以及因此numberOfRowsInTableView:結果)混淆。我認爲表格視圖中的行數應該等於我的數組數量,我想確保我對這個問題的理解不在問題的根源上,但正如我所說,如果沒有指定動畫,表格工作正常。

我在做什麼明顯錯誤嗎?

+0

我試圖複製你的問題,但不能使用一個字典數組來代替帖子。一切正常。所以,也許它有一些特定的事情是做什麼職位。我同意蘋果的文檔,他們沒有任何意義,如果你記錄numberOfRows它隨着支持數組增加,如你所期望的。 – rdelmar 2012-08-16 04:06:23

+0

我與NSTableView在層次結構層次結構中相關。我在下面回答了我自己的問題。感謝您花時間研究它。 – 2012-08-18 22:55:10

回答

1

這個問題結果是由於在基於層的視圖層次結構中使用NSTableView引起的。兩個超級視圖,我有一個層次支持的觀點。在閱讀了一些關於NSTableView的其他文章後,在層次支持層次結構中顯示其他錯誤行爲後,我決定關閉IB中的圖層。當我想要在我的視圖之間使用CA轉換時,現在發生的表動畫的代價是必須維持一些額外的狀態來控制圖層支持狀態。

+0

您是如何關閉在IB中備份的圖層的?我在OSX 10.7上遇到同樣的問題...但不是在10.8 ... bizzarre .... – pdiddy 2013-03-22 17:06:41

+0

選擇視圖並查看圖層檢查器。取消所有的觀點。看到[這個圖像](https://dl.dropbox.com/u/542683/Screen%20Shot%202013-03-22%20at%202.44.42%20PM.png) – 2013-03-22 21:53:52

+0

我有這個問題,當我無意中讓他'NSTableCellView'作爲層次結構中唯一的層次支持視圖。通過關閉層或關閉所有視圖來修復。 – 2016-02-11 18:46:38

相關問題