如何使用单独的viewController正确设置NSPopover

问题描述:

我创建了一个非常简单的测试程序。它有一个按钮。点击该按钮会弹出一个带有标签的NSPopover。该标签位于单独的xib文件上,并具有自己的NSViewController如何使用单独的viewController正确设置NSPopover

目标是当在主屏幕上单击按钮时,弹出窗口将显示viewcontroller的xib文件。而xib文件的标签应该将其文本设置为“It works”。

嗯..它的工作原理,但仅在之后第二次加载popover。在第一次点击按钮时,标签仍然具有其旧的默认值。但从第二次点击开始,“它有效”。 有没有人有一个想法可能会导致这个问题?其只有约5的代码的代码行可以看出此知识库 - >https://github.com/patchthecode/testtest

呼叫[mainScreenPopoverViewController view];- (void)windowDidLoad方法。这会将您的视图加载到内存中。

之前调用[mainScreenPopoverViewController view];(文本框的地址为0x0)

enter image description here

你不应该使用强大的属性对所有IBOutlet中。

@property (nonatomic, strong) IBOutlet NSTextField *textField; 

看看Resource Programming Guide

从实用的角度来看,在iOS和OS X网点应 定义为声明的属性。出口通常应该很弱, (文件的所有者除外)应该是较强的笔尖文件 (或iOS中的故事板场景)中的*对象。这 您奥特莱斯创建因此通常应该较弱,因为:

  • 您创建一个 窗口控制器的窗口视图控制器视图的子视图或例如奥特莱斯,是不随意引用 对象之间意味着所有权。

  • 强大的插座通常由框架类指定(例如, UIViewController的视图插座或NSWindowController的窗口 插座)。

+0

嗨,好吧,我知道强/弱IBoutlets。我的错误。我只是做了这个测试应用程序,所以显示代码弹出。有一件事,解决方案有效,但是为什么会出现一些解释?我相信nib加载代码已经将对象实例化到内存中。 –

+0

使用断点UNIBAction并检查文本字段的地址。 –

+0

正如我设定的中断点,我明白现在发生了什么。谢谢。 –