Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 保留从nib加载的顶级对象_Swift_Xib_Nsmenu_Loadnibnamed - Fatal编程技术网

Swift 保留从nib加载的顶级对象

Swift 保留从nib加载的顶级对象,swift,xib,nsmenu,loadnibnamed,Swift,Xib,Nsmenu,Loadnibnamed,我有一些视图控制器共享的菜单。为了避免重复,我给菜单提供了自己的nib文件。我用这个代码片段加载菜单。菜单是从文件加载的,但不会保留 如果我设置了所有者,菜单将保留,但随后我将丢失viewController中的所有其他插座 如何在swift中保留此菜单 override func viewDidLoad() { super.viewDidLoad() var xibItems : NSArray? NSBundle.mainBundle().loadNibNamed(

我有一些视图控制器共享的菜单。为了避免重复,我给菜单提供了自己的nib文件。我用这个代码片段加载菜单。菜单是从文件加载的,但不会保留

如果我设置了所有者,菜单将保留,但随后我将丢失viewController中的所有其他插座

如何在swift中保留此菜单

override func viewDidLoad()
{
    super.viewDidLoad()

    var xibItems : NSArray?
    NSBundle.mainBundle().loadNibNamed("Menu", owner: nil, topLevelObjects: &xibItems)
    if let xibMenu = xibItems?.firstObject as? NSMenu
    {
        self.popupButton.menu = xibMenu
        println(xibMenu) //ok
    }
}
编辑:

将菜单指定给局部变量(以保持强引用)没有帮助。但如果我指定一个局部变量并将其打印出来,那么它就可以工作了。这并不令人满意,因为我不想要println语句。避免一个额外的局部变量也会有好处

override func viewDidLoad()
{
    super.viewDidLoad()

    var xibItems : NSArray?
    NSBundle.mainBundle().loadNibNamed("Menu", owner: nil, topLevelObjects: &xibItems)
    if let xibMenu = xibItems?.firstObject as? NSMenu
    {
        self.popupButton.menu = xibMenu // popupButton is an IBOutlet
        self.popupMenu = xibMenu  //local variable
        println(xibMenu) //ok
    }
}

都是
self.popupButton
popupButton.menu
强引用吗?@IBOutlet var popupButton:NSPopUpButton!