2011-01-16 24 views
0

我在浮動窗口中有一個NSTableView,它動態綁定到與最前面的文檔窗口對應的NSArrayController實例的arrangedObjects屬性,其代碼如下:NSTableColumn將值綁定到最前面的窗口的NSArrayController在窗口更改上拋出異常

NSArrayController *documentSpecificArrayController; // properly set elsewhere 
NSTableColumn *tableColumnToBind; // properly set elsewhere 

[tableColumnToBind unbind:NSValueBinding]; 
[tableColumnToBind bind:NSValueBinding 
       toObject:documentSpecificArrayController 
      withKeyPath:@"arrangedObjects" 
       options:[NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithBool:YES], 
         NSContinuouslyUpdatesValueBindingOption, 
         nil]]; 

只要表示的數組/表視圖是空的,事情工作正常;一個文檔內的表視圖/表示數組上的所有各種操作都可以正常工作。如果從具有非空的表示數組的文檔切換到表示數組爲空的文檔,則拋出層出不窮的異常。

我是否錯過了在切換窗口時需要乾淨切斷綁定的操作?還有別的嗎? (是否有一些我省略的具體信息可以幫助診斷我的錯誤?)

+0

「在其他地方正確設置」[引用需要] :-) –

+0

@Joshua Nozzi:我知道有人*會問。 :)數組控制器是文檔類的屬性,它是新的最頂層窗口的委託,所以它就是這樣的;表列包含在連接到發生此代碼的類的IBOutlet的表視圖中。我已經證實,獨立於此異常投擲,兩個變量都已設置並按預期更改。 – Isaac

回答

1

根據您的評論,似乎您可能會嘗試創建檢查器調色板或類似的東西。這是真的?如果是這樣,您應該通過使用mainWindow.document.myArrayController的鍵路徑綁定到Shared Application來直接綁定到活動文檔的數組控制器。我認爲你遇到了運行循環/計時問題與綁定和使用這種方法應該緩解。

+0

我會盡快進行測試,但(1)用例就像是一個督察調色板,(2)它對我迄今爲止看到的有意義,(3)它會簡化一個相當冗長和混亂的方式將事物掛鉤到一個簡單的約束。在文檔中是否有某處我應該看到如何從一開始就做到這一點? – Isaac

+0

我不知道這是專門記載在蘋果的東西的任何地方,但它是一個解決方案,已經在各種Cocoa社區網站10.3天以來一直漂浮。我自己使用它。警告:如果您有不同的文檔類型,並且都不具有該鍵路徑,則需要「填空」,並返回nil給不符合規範的doc類中的myArrayController部分,否則將會出現關鍵路徑錯誤。 –

+0

其他建議:將一個數組控制器放在調色板的xib中,並將表綁定到* it *。然後將*數組控制器的內容綁定到文檔的數組控制器要表示的集合(通過相同的鍵路徑「trick」,僅使用不同的最終段 - 集合的關鍵字而不是陣列控制器的關鍵字)。調色板的窗口應該擁有自己的控制器。 –

相關問題