0

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

如果我设置了所有者,菜单会被保留,但我会丢失我的 viewController 中的所有其他出口。

您如何快速保留此菜单?

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
    }
}
4

0 回答 0