簡體   English   中英

NSDocument將事件發送到NSViewControllers的標准方式是什么?

[英]What's the standard way for NSDocument to send events to NSViewControllers?

(背景:我有一個正在編寫的Cocoa應用程序,可以正常運行,但是太復雜了,因為它無法很好地分離模型/視圖/控制器。因此,我將其更新為使用NSDocument和NSWindowController /總體來說,這是一個不錯的變化,但是有些地方我還不太了解。)

我有一個保存文檔狀態的NSDocument,以及一個管理邏輯的NSWindowController-> NSViewControllers層次結構。 當視圖控制器響應用戶輸入並需要更改某些狀態時,它可以輕松獲取其NSDocument並在其上調用一個方法以進行請求的更改(這還將在undoManager中注冊,等等)。 這個方向很好。

但是另一個方向還不清楚。 當NSDocument進行更改時(也許是直接響應用戶的編輯,但也許不是直接響應),它通常如何將事件發送給視圖控制器以更新視圖?

我在Apple文檔中看到了一些方便的圖表 ,但我不清楚它們要顯示的內容。 橙色箭頭定義為“擁有並管理”,但是它從未說出虛線箭頭,雙頭箭頭或雙頭箭頭的含義。

它們是否意味着建議應用程序通常具有通過其NSWindowController中的方法表示的每種類型的狀態更改,然后將它們傳遞給NSViewController樹中的相應方法? 這看起來很笨拙。

現在,我傾向於讓我的NSDocument在NSNotifications上發布所有更改,然后讓NSViewControllers准確注冊他們關心的通知。 這似乎不太笨拙,但也許仍然不理想。

編輯:還是KVO? 蘋果公司的示例確實使用了KVO,但它也具有簡單得多的數據模型。 我不確定這是否對我有用,而且似乎與Swift的發展方向也不完全一致。 我不想跳上沒有美好未來的事情。

我讀過的所有內容都說要避免使用KVO,而且KVO在所有可可粉中的API最差。 所以我們就跳過它。

com.sys.mac.programmer.help上的舊帖子說NotificationCenter是一個很好的解決方案:

我的偏好是在模型的設置器中發布通知,並注冊我的窗口控制器(或控制視圖的任何控制器)以接收那些通知

由於某種原因,很難找到使用NSDocument的示例程序,但這是使用此模式的程序的簡單示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM