我目前正在为SketchApp编写一个带有可可的插件。
我尝试在那里使用NSPopover,单击按钮时应该由IBAction触发。问题是:弹出器没有出现,当检查变量时,应该保存弹出器,它是nil。
我在Interface中创建了NSPopover,所以不是以编程的方式在代码中创建;然后在链接的类头文件中定义IBOutlet绑定;最后在实现类中使用这个变量。
这是我的源代码:
MyComponent.h
// imports skipped...
@interface
@property (nonatomic, weak) IBOutlet NSTextField *componentDescription;
@property (nonatomic, weak) IBOutlet NSTextField *componentGuid;
@property (nonatomic, weak) IBOutlet NSButton *guidCopyButton;
@property (nonatomic, weak) IBOutlet NSPopover *popover;
-(IBAction)onCopyButton_Clicked:(id)sender;
@endMyComponent.m
-(IBAction)onCopyButton_Clicked:(id)sender {
// copy stuff to clipboard
// [...]
// show copied popover
[_popover showRelativeToRect:[sender bounds]
ofView:sender
preferredEdge:NSMinYEdge];
}在我的xib视图文件中,我将NSPopover对象链接到IBOutlet NSPopover *popover;。但是,在我的类实现中检查_popover时,总是nil。
发布于 2018-07-28 08:41:57
好吧,在推特之后,我想我终于明白了到底出了什么问题。将内存模式从@property (nonatomic, weak) NSPopover *popover;更改为... (nonatomic, strong) ...;后,实例不再是nil。
我认为NSButton (例如)的不同之处在于,该按钮是在xib模板中使用的,因此该按钮的引用不会被清除。然而,Popover并不是直接“使用”的,所以在实际使用之前,它可能会被清理干净。因此,将其从weak改为strong似乎就是重点所在。
然而,:,这种调整是否有意外的/意外的副作用,我可能想以某种方式加以解决?我现在就得自己去处理破坏吗?
https://stackoverflow.com/questions/51561619
复制相似问题