保留从nib加载的顶级对象

时间:2015-03-26 11:26:15

标签: swift xib nsmenu loadnibnamed

我有一个由一些viewControllers共享的菜单。为了避免重复,我给菜单提供了自己的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
    }
}

0 个答案:

没有答案