gre*_*ght 11 macos iboutlet swift
(在OSX 10.9上开发,Xcode 6.1b)
如果我在AppController中声明IBOutlets,一切都很好.我在InterfaceBuilder中实例化一个对象,拖动它来形成一个插座,当我到达applicationDidFinishLaunching时,我的IBOutlets被填充,一切都很棒.
如果我更进一步抽象并在InterfaceBuilder(NSObject的子类)中实例化一个自定义控制器对象,并将我的一个对象声明为该类中的IBOutlet,那么它们就是零,每一个都是零.
我可以设置连接就好了,IB似乎确信它存在,'引用的出口'列表是正确的,但它不需要,我在文档之外找不到任何东西
它是隐式解包的,因为在从storyboard或xib文件初始化类之后,您可以假设插座已连接.
好吧,我在假设.
我的所有代码都是样板Xcode产品:
@IBOutlet弱var sceneController:NSArrayController!
我已检查并仔细检查并三重检查连接.我看过几十个iOS教程(虽然我找不到OSX的等价物)所有这些似乎都是主题的变化'是的,你可以在AppController以外的文件中完全声明一个插座,只需确保每个涉及的实例都存在'.
(在撰写本文时,'mac'文档使用了以UIButton等为特色的示例)
我没有想法.很明显,连接没有形成,大概是因为对象是以"控制器类优先,IBOutlets以后"之外的顺序实例化的,但是我如何强制连接呢?
Run Code Online (Sandbox Code Playgroud)@IBOutlet weak var sceneController: NSArrayController!
该weak关键字是你的问题。如果在系统完成对您的笔尖进行解码后,没有其他任何内容引用NSArrayController,则系统将立即将出口设置为nil并取消分配NSArrayController.
尝试weak从您的网点中删除关键字。
添加此代码:
@IBOutlet var sceneController: NSArrayController! {
didSet {
NSLog("sceneController set to %@", sceneController);
}
}
Run Code Online (Sandbox Code Playgroud)
输出是什么?将断点放在NSLog. 命中时的堆栈跟踪是什么?是不是反复打?