回答
該undoManager
不是NSWindowController的成員。 這只是一個NSDocument「功能」。
摘自NSDocument文檔: ...文檔管理其窗口的編輯狀態,並設置爲執行撤消和重做操作。 ....
節「子類NSDocument」:
....子類也是負責創建用於管理文件窗口的窗口控制器和撤消的實施和重做。 ...
您編寫的代碼不適用於其他強類型語言,因爲您會將消息發送給不存在的對象。我很確定你應該在這裏有一個編譯器警告。
希望這有助於
最好,
弗洛
謝謝,這確實有幫助。問題仍然是我如何解決它。我需要一種方法來確定我的子窗口屬於由** X **指向的文檔。如果通過'appController'打開窗口,我將如何獲得** X **? – markjs
我重新實現了'showWindow:sender',拿起文檔指針(應該是「sender」),然後調用'[super showWindow]''。爲什麼它會得到這個錯誤:* 2012-06-27 14:39:59.315 myApp [32268:403] + [AppController _autosavesInPlace]:無法識別的選擇器發送到類0x105c70790 *? – markjs
請忽略之前的評論:「發件人」是appController,而不是父文檔。那麼,我將如何獲得指向* NSDocument *的指針呢? – markjs
Flo的答案是一個很好的起點。一段時間後,事實證明,響應者鏈不知何故(或者,它可能是我:-))。
子窗口,通過NSWindowController
控制,應自動(?)有文件屬性,以便[self document]
返回與此窗口關聯的文檔。從中撤出撤消管理器很容易。
但是,在我的應用程序(也在一個小測試應用程序中),此文檔未設置。當我從文檔([newWindow setDocument:self]
)中手動設置它時,一切正常:註冊撤銷/重做動作,菜單欄等。
現在你的問題得到解答了嗎? – guitarflow
是的。但是,一個新的問題如下:*爲什麼*響應者鏈變得混亂了?我是否錯誤地認爲它應該返回到原始文檔?如果是這樣,爲什麼?如果不是,還有什麼事情發生? – markjs
- 1. ios撤消管理器 - 重置爲第一個撤消
- 2. 如何爲多個UIView添加撤消管理器
- 3. 撤消管理器的觀察
- 4. 撤消管理器和多個MOC
- 5. 在iphone中的撤消管理器sdk
- 6. Objective-C撤消管理器問題
- 7. FileSystemWatcher - Windows資源管理器 - >撤消
- 8. 爲什麼使用實體管理器?
- 9. Spring Roo「撤消創建」/「撤消管理」的根本原因?
- 10. 爲什麼self.navigationController成爲零?
- 11. 撤消核心數據管理對象
- 12. 如何管理OSX服務的撤消?
- 13. 存儲管理,ARC - 什麼零?
- 14. 爲什麼包管理器始終爲空?
- 15. 爲什麼場景將場景管理器作爲參數?
- 16. 爲什麼Dart的軟件包管理器被稱爲pub?
- 17. 爲什麼消息採樣處理器停止探測消息?
- 18. 部分遷移失敗時,爲什麼不「撤消」?
- 19. 爲什麼撤消畫布不起作用?
- 20. 爲什麼此代碼未能清空撤消堆棧
- 21. 爲什麼沒有辦法在C++中撤消「使用」?
- 22. Java撤消Managaer,爲什麼一個角色在一次
- 23. 爲什麼Git中沒有撤消/重做?
- 24. 爲什麼sizeof(spinlock_t)在單處理器上大於零?
- 25. 撤消標記爲合併
- 26. 撤消CSS層疊行爲
- 27. 從Swing的撤消管理器中隱藏某些動作
- 28. 如何使用撤消管理器與核心數據實體
- 29. php/ajax用戶操作撤消管理器
- 30. 文本視圖的多個撤消管理器
而'self'這裏是'NSDocument'的子類嗎? – trojanfoe
'self'從'NSWindowController'分類;它是否僅在從「NSDocument」子類時才起作用? – markjs