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

时间:2013-07-08 04:51:55

标签: objective-c cocoa interface-builder nspopover

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

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

嗯..它有效,但仅在之后第二次加载弹出框。在第一次单击该按钮时,标签仍具有其旧的默认值。但是从第二次点击开始,“它有效”。 是否有人知道可能导致此问题的原因?它只有大约5行代码代码可以在这个存储库中看到 - > https://github.com/patchthecode/testtest

1 个答案:

答案 0 :(得分:1)

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

在致电[mainScreenPopoverViewController view];之前(文本地址为0x0)

enter image description here

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

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

查看Resource Programming Guide

  

从实际角度来看,iOS和OS X应该是   定义为声明的属性。奥特莱斯一般应该很弱,   除了从文件所有者到nib文件中的顶级对象的那些   (或者,在iOS中,故事板场景)应该是强大的。那个奥特莱斯   因此,你创造的应该通常很弱,因为:

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

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

  •