2010-11-20 142 views
0

我有一個NSOutlineView,其內容綁定到一個合適的NSTreeController。它工作得很好,除了我的應用程序加載時,只有NSOutlineView的大約一半內容顯示。NSOutlineView不刷新/顯示所有內容

如果我在cmd + tab後退,則會顯示所有內容。如果我點擊空白行,我知道應該有內容,我點擊的行中的文本突然出現。所以內容就在那裏,它只是不正確的刷新。我想我需要發送NSOutlineView一個needsDisplay消息或類似的東西,但我不太確定在哪裏。

這對我來說似乎不合邏輯 - NSOutlineView當然應該能夠在綁定時正確顯示其內容。有什麼明顯的我失蹤了?

回答

0

根據蘋果文檔,你應該總是發送-reloadData大綱視圖創建後。在你的情況下,無論你的NIB在哪裏完成加載(-awakeFromNib-applicationDidFinishLaunching?取決於實施)。

您是否發送了大綱視圖-reloadData消息?這總是適合我。

+1

這不起作用 - 這裏的文檔指的是NSOutlineView何時使用數據源,而不是綁定。我不相信使用數據綁定的對象因爲使用Key-Value-Observing而需要調用reloadData。 – 2010-11-20 03:01:22

+0

啊,當然,我以前沒有用可可綁定的大綱視圖。 – d11wtq 2010-11-20 03:07:22

0

我放棄了綁定這個NSOutlineView並改用NSOutlineViewDataSource來代替。我懷疑我的代碼的某些部分不完全符合KVO,這導致它無法正常工作。

0

使用KVO時,可以通過發送willChangeValueForKey:didChangeValueForKey:到擁有綁定到NSOutlineView的屬性的對象(最有可能是控制器)來導致更改通知。這些消息可以從awakeFromNib:applicationDidFinishLaunching:處理程序發送,就像reloadData一樣。

如果您添加(最小)sample code到您的問題,我們可能能夠找出是否可以解決問題,或者是否有其他需要解決的問題。