gpt4 book ai didi

macos - NSDocument 向 NSViewController 发送事件的标准方法是什么?

转载 作者:行者123 更新时间:2023-12-03 16:48:33 25 4
gpt4 key购买 nike

(背景:我正在编写一个 Cocoa 应用程序,它运行良好,但太复杂,因为它没有很好地分离模型/ View / Controller 。因此,我将其更新为使用 NSDocument和 NSWindowController/NSViewController。总的来说,这是一个很好的改变,但有几个部分我还不太明白。)

我有一个保存文档状态的 NSDocument,以及管理逻辑的 NSWindowController -> NSViewControllers 层次结构。当 View Controller 响应用户输入并需要更改某些状态时,它可以轻松获取其 NSDocument 并调用其方法来进行请求的更改(这也会将其注册到 undoManager 等)。这个方向效果很好。

但另一个方向不太清楚。当 NSDocument 进行更改时(可能是直接响应用户编辑,但也可能不是),它通常如何将事件发送到 View Controller 以更新 View ?

我看到一些方便的diagrams here在苹果的文档中,但我不清楚他们想要展示什么。橙色箭头被定义为“拥有和管理”,但它从未说明虚线箭头、双端箭头或双头箭头的含义。

它们是否意味着应用程序通常具有由 NSWindowController 中的方法表示的每种类型的状态更改,这些状态更改将它们传递给 NSViewController 树中的相应方法?这看起来相当笨拙。

现在,我倾向于让我的 NSDocument 为所有更改发布 NSNotifications,然后让 NSViewController 准确注册他们关心的通知。这看起来不那么笨拙,但也许仍然不理想。

编辑:还是 KVO? Apple 的示例确实使用了一点 KVO,但它也有一个更简单的数据模型。我不确定这对我有用,而且它似乎也不完全符合 Swift 的发展方向。我不想跳上没有美好 future 的事情。

最佳答案

我读过的所有内容都说要避免 KVO,而且 KVO 的 API 是所有 Cocoa 中最差的。所以我们就跳过这个吧。

This old post on com.sys.mac.programmer.help说NotificationCenter是一个很好的解决方案:

my preference has been to post a notification in my setters in the model and register my window controllers (or whatever controller is controlling the views) to receive those notifications

出于某种原因,很难找到使用 NSDocument 的示例程序,但是 here's a simple example使用此模式的程序。

关于macos - NSDocument 向 NSViewController 发送事件的标准方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40952228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com