2008-11-30 55 views
0

所以在這裏引發不工作就是我的了:NSTableView的-setDataSource時FSEvents

  • 一個NSTableView與一個NSMutableArray數據源
  • FSEvents監測,裏面有包含了數據的文件夾表視圖(使用SCEvents進行Objective-C抽象優化)
  • FSEvents觸發與UI中的重新加載按鈕相同的功能。該功能通過setDataSource:根據所述文件的內容使用新的數據源刷新表格視圖。

而這裏發生了什麼:

  • 如果我進行了更改的文件時,FSEvent被觸發,並且刷新方法被調用。
  • 表視圖應該接受的數組確實包含觸發FSEvent的更改。
  • setDataSource:使用正確的數據源發送到NSTableView。
  • 更改不會出現在表格視圖中!

但後來:

  • 如果我打的刷新按鈕,觸發完全相同的方法爲FSEvent,表視圖獲取新數據更新。

我也嘗試用NSNotification替換FSEvent(NSApplicationDidBecomeActiveNotification),但發生同樣的事情。

任何人都知道爲什麼會發生這種情況?

編輯:爲了澄清,我的問題jist是這樣的:爲什麼我的NSTableView重新加載,因爲它應該在按下按鈕時觸發,而不是由FSEvent或NSNotification觸發時?

編輯:由於diciu,我已經發現事實上我的所有UI參考都指向0x0,但是當按鈕點擊觸發時,它的有效地址就是有效的。這些對象都在IB中聲明,因此在我的代碼中沒有實例化或分配給他們。所以現在我的問題是:我能做些什麼來阻止這些指針指向零?

回答

1

聽起來像當您註冊事件/通知時,您傳遞的是控制器類的不同實例。

+0

這不是問題,但是我會把這個標記爲正確的,因爲它指向了正確的方向。 謝謝! – 2008-12-01 04:28:02

1

您是否嘗試過從運行循環的第二遍FSEvent調用您的方法?

[myObject performSelector:@selector(reloadAction:) withObject:nil afterDelay:0.0]; 
+0

是的。那也行不通。 – 2008-11-30 07:53:27

2

我們稱之爲reloadData上NSTableView的,當我們有新數據添加/刪除表。

這可能有助於強制NSTableView重繪。

我不確定這是不是你問的問題。你的問題的措辭有點令人困惑,你陳述了一系列事件,但從來沒有一個真正的問題。

+0

這就是我要問的。不幸的是reloadData產生相同的結果。 – 2008-11-30 07:55:57

1

您正在將NSArray直接設置爲表視圖的數據源?

這不是NSTableView的工作原理。數據源必須是符合NSTableDataSource的對象。 NSArray沒有。你自己寫數據源;它可能與您目前撥打setDataSource:的對象相同。

另一種方法是使用綁定。

+0

我在NSArray上有一個類別,因此它符合`NSTableDataSource`協議的必要方法。 – 2008-11-30 07:48:25

1

難道是刷新方法範圍內對錶視圖的引用無效嗎?

I.e.你確定你沒有調用[nil reloadData]不會產生任何錯誤嗎? 如果您在awakeFromNib之前或在其他情況下將其設置爲刷新代碼,則您對錶視圖的引用可能爲零。

+0

你說得對。所有的UI對象在事件觸發時都是零,但是從按鈕(和awakeFromNib)觸發時具有正確的地址。有趣的... – 2008-11-30 09:15:50