我有一个由一些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
}
}