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