NSViewController IBOutlet 始终为零
NSViewController IBOutlet is always nil
我有一个 Cocoa 应用程序,它有一个主 NSWindowController
和一个 NSView
连接到一个 NSViewController
对象,如下所示:
CloudCardsViewController 是一个 NSViewController
,其 Nib
和 IBOutlet
为 NSStackView
。当我尝试访问插座时,应用程序崩溃并在控制台上显示此错误:
fatal error: unexpectedly found nil while unwrapping an Optional value
2017-09-16 19:46:43.756852+0200 AppName[3402:150754] fatal error:
unexpectedly found nil while unwrapping an Optional value
如果我通过代码添加 NSViewController
,工作正常...
代码如下:
如果我打印 baseStackView
结果是 nil
有什么想法吗?
谢谢!
您的代码的问题在于您仅 从 XIB 文件加载 MainWindowController
。 MainWindowController
被初始化,只有来自 CloudCardsViewontroler
的连接的 XIB 被初始化。 但是您的 CloudCardsViewController
从未真正为自己初始化过 。你不能这样使用你的CloudCardsViewController
。您需要对其进行初始化,然后将其添加到您的 MainWindowController
。
您直接使用初始化程序实例化了 class。插座不会以这种方式连接。 Interface Builder 创建您的 classes 的自定义实例,并将这些实例编码到 NIB 和 Storyboard 中以进行重复解码,它并不定义 classes 本身。
我有一个 Cocoa 应用程序,它有一个主 NSWindowController
和一个 NSView
连接到一个 NSViewController
对象,如下所示:
CloudCardsViewController 是一个 NSViewController
,其 Nib
和 IBOutlet
为 NSStackView
。当我尝试访问插座时,应用程序崩溃并在控制台上显示此错误:
fatal error: unexpectedly found nil while unwrapping an Optional value 2017-09-16 19:46:43.756852+0200 AppName[3402:150754] fatal error: unexpectedly found nil while unwrapping an Optional value
如果我通过代码添加 NSViewController
,工作正常...
代码如下:
如果我打印 baseStackView
结果是 nil
有什么想法吗? 谢谢!
您的代码的问题在于您仅 从 XIB 文件加载 MainWindowController
。 MainWindowController
被初始化,只有来自 CloudCardsViewontroler
的连接的 XIB 被初始化。 但是您的 CloudCardsViewController
从未真正为自己初始化过 。你不能这样使用你的CloudCardsViewController
。您需要对其进行初始化,然后将其添加到您的 MainWindowController
。
您直接使用初始化程序实例化了 class。插座不会以这种方式连接。 Interface Builder 创建您的 classes 的自定义实例,并将这些实例编码到 NIB 和 Storyboard 中以进行重复解码,它并不定义 classes 本身。