1

我创建了一个非常简单的测试程序。它有一个按钮。单击该按钮会弹出一个NSPopover带有标签的标签。该标签位于一个单独的 xib 文件中,带有自己的NSViewController.

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

好吧..它有效,但仅在第二次加载弹出框后才有效。在第一次单击按钮时,标签仍具有其旧的默认值。但是从第 2 次点击开始,“它起作用了”。 有谁知道是什么导致了这个问题?它只有大约 5 行代码代码可以在这个存储库上看到 --> https://github.com/patchthecode/testtest

4

1 回答 1

1

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

调用前[mainScreenPopoverViewController view]; (文本字段地址为 0x0)

在此处输入图像描述

您不应该对所有 IBOutlet 使用强属性。

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

看看资源编程指南

从实际的角度来看,在 iOS 和 OS X 中的 outlet 应该被定义为声明的属性。出口通常应该是弱的,除了从文件所有者到 nib 文件中的顶级对象(或者,在 iOS 中,故事板场景)应该是强的。因此,您创建的 Outlets 通常应该很弱,因为:

  • 例如,您为视图控制器的视图或窗口控制器的窗口的子视图创建的出口是对象之间的任意引用,并不暗示所有权。

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

于 2013-07-08T07:22:37.157 回答