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