问题标签 [nswindowcontroller]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2704 浏览

cocoa - 打开新的 NSWindowController

我是 Cocoa 编程的新手。

我有一个 mainNSWindowController并想打开第二个 sub NSWindowController。无论如何似乎无法找到代码。

任何人都可以帮忙吗?

0 投票
1 回答
413 浏览

iphone - 使用 OCMock 测试 NSWidowController

我一直在尝试想出一种方法来使用 OCMock 对我的 applicationDidFinishLaunching 委托进行单元测试。我的 NSWindowController 在这里实例化,我想对其进行测试。这是我的测试代码:

当我运行测试时,我收到错误:

“OCMockObject [URLTimerWindowController]:未调用预期方法:showWindow:-[URLTimerAppDelegateTests testApplicationDidFinishLaunching]”

该日志提供了更多详细信息:

所以我看到NIB无法加载。好的,那么我如何在单元测试时加载它或以某种方式模拟它的负载?我已经查看了 OCMock 文档、Chris Hanson 的单元测试技巧以及其他一些资源,包括以类似方式运行的 WhereIsMyMac 源代码。我用于实例化窗口控制器的应用程序是这样的:

非常感谢任何提示。

0 投票
2 回答
9063 浏览

cocoa - NSWindowController 的红色关闭按钮事件

如何处理单击 NSWindowController 的红色关闭按钮的事件?

问的原因是我在一个新的 NSWindowController 窗口中播放了一个视频,当用户单击红色关闭按钮时,音频继续播放,所以我想使用该事件来关闭视频。

0 投票
1 回答
416 浏览

cocoa - 对子类 NSWindowController 的引用返回其文档 - 这是正确的吗?

我是基于文档的应用程序的新手,因此我可能错过了一些基本的东西。我编写了一个基于文档的应用程序,它使用子类 NSWindowController 作为接口,使用子类 NSDocument 作为模型。根据文档,我在 makeWindowControllers 中初始化了 windowController 并加载了它的 xib。在界面生成器中,xib 将我的 windowController 子类设置为文件的所有者。在窗口中的视图中,我有一个 NSOutlineView 的子类,并且 NSOutlineView 数据源和委托也在 nib 中引用并通过 IBOutlets 连接到 windowController。

根据文档,我应该能够通过 [windowController 文档] 从 OutlineView 数据源访问文档。但是,从 OutlineView 数据源引用 windowController(通过 IBOutlet)给了我文档!

这导致 OutlineView 数据源(它是 windowController 的 xib 中 NSObject 的子类)中的一些相当丑陋的代码来获取文档,例如:

头文件中的 IBOutlet 将 myWindowController 引用为:

简而言之 - 为什么在这种情况下连接到 windowController 的 IBOutlet 会直接让我获取文档?上面的代码有效,但似乎不应该。

编辑:澄清

0 投票
1 回答
209 浏览

objective-c - 如何在另一个 xib 中访问属于 MyDocument 的 NSArray 实例?

在我的文档应用程序中,我将我在 MyDocument.xib 中引用的 NSArrayController 子类化,将其内容绑定到File 的 Owner.entries

entries 是一个 NSArray,我以这种方式公开为 MyDocument 类的属性:

这工作得很好。好的。

现在我设计了另一个 .xib,CSVEntries.xib,我通过 NSMenuItem 通过 NSWindowController 打开它,并且再次运行顺利。

我不知道如何让这个新窗口在 NSTableView 中显示 MyDocument.entries 实例的内容。

我已经尝试了很多东西,但问题基本上是我放在 CSVEntries.xib 上的任何 NSArrayController 都不能绑定到 MyDocument.entries: CVSEntries.xib 文件的所有者指的是其他东西而不是 MyDocument(我猜这是合乎逻辑的)。

我还尝试将 NSArray 实例的副本添加到打开 CVSEntries.xib 的 NSWindowController 中,但是由于仅在用户单击菜单时才实例化窗口,因此我最终得到了一个空数组。

我在互联网上搜索但找不到合适的答案,我只是想找出解决问题的正确方法,我确信两个窗口可以相互通信,也许访问它们的共同父级(NSApplication 实例)?

所有新手问题,我知道:)

更新

我想我知道在哪里看,但仍然不知道如何看。我想我必须确保第二个窗口文件的所有者是 MyDocument 但在 NSWindowController initWithWindowNibName:owner: 我不明白如何将 MyDocument 实例指定为所有者。仅在 xib 文件 File's Owner 中指定它似乎还不够。

更新 2

嗯...我开始认为我需要有两个 NSWindowController 实例,它们都由我的 NSDocument 子类(默认为 MyDocument)实例化。有了这些,可能两个 NSWindowController 都可以访问 MyDocument.entries NSArray,并且两个 windows xib 文件将能够绑定到 File 的 Owner.entries。

有人可以证实这一点吗?谢谢。

0 投票
1 回答
2176 浏览

objective-c - NSWindowController 没有在初始化时隐藏它的窗口?

我有一个 NSDocument 子类,其中有两个 NSWindowController 对应于 2 个不同的 xib。

遵循基于文档的应用程序指南,我在 document.m 实现中添加了以下内容

问题是我希望第二个窗口控制器 csvWindowController 最初隐藏它的窗口,稍后我将显示相同的窗口实例。为此,我写了:

但是窗口在那里,出现了。

请不要我没有标记 VisibleAtLaunch,该控制台正在正确显示我的消息,即使我更改:

结果是一样的,窗口出现了。

任何帮助表示赞赏,谢谢:)

0 投票
1 回答
591 浏览

cocoa - 在 NSPanel 中初始化控件

我的应用中有一个 NSPanel,用作数据导出功能。

最初显示面板时如何初始化面板中的控件?(即使用 NSDefaults)。当窗口/面板打开时似乎没有触发事件,我可以恢复默认设置(基本上只是恢复 NSPopupButton 的值)。

目前,我在我的 App Delegate 类中使用“[NSApp beginSheet...]”打开面板。我应该改用 NSWindowController 子类吗?

0 投票
1 回答
1122 浏览

objective-c - NSViewController 或 NSWindowController 来管理 nib

就良好实践和资源使用(内存等)而言,如果任何一种方法都满足我的尝试,那么使用 NSViewController 或 NSWindowController 哪种方法更可取。从另一个笔尖打开另一个笔尖。我可以使用任何一个来完成。唯一的区别是实例化语法和调用语法如下(initWithNibName vs. initWithWindowNibName and [nib view] vs [nib showWindow:sender])

任何意见?

0 投票
2 回答
1126 浏览

objective-c - NSWindowController 的 showWindow 导致内存泄漏:

我一直在努力解决以下泄漏问题。我通过 Instruments 将其缩小到以下代码块:

该块的名称如下:

哪里recipient只是一个 NSString。

这是仪器的回溯:

windowControllers是方法中的NSMutableArray分配/初始化applicationDidFinishLaunching和释放dealloc

在 中NewMessageWindowController,我使用以下命令通知应用程序委托窗口即将关闭并且不再需要保留控制器:

应用委托的方法如下所示:

在之前和之后记录数组是我所期望的。控制器在窗口关闭之前就在那里,当窗口关闭时它被移除。

当我关闭窗户时,仪器会发现泄漏。虽然它是开放的,但一切似乎都很好。值得注意的是,在 NewMessageWindowController 中按预期调用了 dealloc。Leaks 并未将控制器本身报告为问题,而是泄漏的对象是 NSCFString,它只是源自上面的代码。

构建和分析没有得到任何东西,我很确定我的内存管理在创建/显示窗口控制器/窗口的代码块上很好。

奇怪的是,如果我使用键盘关闭窗口,只会出现泄漏。如果我单击单击红色关闭按钮,仪器不会拾取任何东西。

最后,Instruments 并不总是表明该代码块是负责任的。在这些情况下,我的代码都没有在 Instruments 中被引用——它似乎都是 AppKit。同样,这仅在我使用键盘关闭窗口(cmd-w)时。

有任何想法吗?

0 投票
1 回答
462 浏览

objective-c - NSWindowController showWindow 在其他 Mac 上导致问题

我正在测试我的新 Mac 应用程序,该应用程序在我的两台 MacBook Pro 和另一台测试人员的 iMac 上运行良好。但是对于我的另外两个 beta 测试人员(都具有与我完全相同的 osx,10.6.7),我的应用程序窗口不会在启动时打开。

在检查他们的控制台日志后,我将问题缩小到我的 MainWindowController 类(NSWindowController 的子类)上的 showWindow 调用。

showWindow 调用触发所有 viewController 的 awakeFromNib 方法被调用,这一切似乎都正确发生,但在 showWindow 返回之前,此消息从我的应用程序发送到控制台:

我发现这个错误很难修复,因为我无法在我的 Mac 上重现它,而且它似乎不是源自我的任何代码。

任何见解将不胜感激。