我的應用程序 - 基於文檔的核心數據應用程序 - 正在經歷第二次迭代,現在需要多個窗口來管理多個模型對象。目前它通過一個窗口和一個控制器來管理事件和位置。標準生成的文檔類目前充當主窗口的控制器。基於Cocoa應用程序的多窗口文檔的最佳方法是什麼?
我現在想要一個單獨的窗口來管理位置模型對象。對於每個窗口都有一個單獨的控制器(NSWindowController)似乎是很好的設計,但後來我意識到這些控制器將無法訪問訪問模型對象所需的託管對象上下文。
這裏最好的辦法是什麼?
編輯:
我跟着ughoavgfhw溶液如下:
- 創建一個新的XIB爲位置,並增加了陣列控制器加載位置對象
- 創建的定製控制器
ManageLocationsController
作爲一個子類NSWindowController
- 使自定義控制器成爲位置中的文件所有者XIB
- 映射陣列控制器的情況下,以文件的所有者和的keyPath document.managedObjectContext
我打開位置窗口:
ManageLocationsController *aController = [[ManageLocationsController alloc] initWithWindowNibName:@"ManageLocations"];
[aController showWindow: self];
這是從EventDocument,這是由的XCode默認生成的類來完成。
映射數組控制器時,在keyPath字段中留下一個圓形的黑色感嘆號,當我打開Location窗口時,它會拋出一個異常,指出「不能在沒有管理對象的情況下執行操作」。顯然不好。我錯過了什麼?
非常感謝。我已根據您的答案編輯了結果的問題。 – Roger
@Roger對不起,我忘了添加關於使用自定義窗口控制器與NSDocument的細節。我現在補充一下。 – ughoavgfhw
謝謝你。這雖然有所幫助,但現在我得到了「此類不是關鍵的managedObjectController的符合關鍵值編碼」例外。我懷疑這與keyPathsForValuesAffectingManagedObjectContext方法有關。我是否需要在自定義控制器類中實現該方法? – Roger