我目前正在为可可写SketchApp插件。
我尝试在其中使用NSPopover
,单击按钮时应由IBAction
触发。问题是:弹出窗口不显示,并且在检查应保存弹出窗口的变量时,它是nil
。
我在接口生成器中创建了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;
@end
MyComponent.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
。 最佳答案
好吧,经过几周的讨论之后,我想我终于明白了出了什么问题。将内存模式从@property (nonatomic, weak) NSPopover *popover;
更改为... (nonatomic, strong) ...;
后,实例不再是nil
。
我认为与NSButton
的区别(例如)是xib模板中使用了该按钮,因此该按钮的引用没有被清除。但是,Popover并非直接“使用”,因此在实际使用前可能会被清理。因此,将其从weak
更改为strong
似乎是这里的重点。
但是:此调整是否有我可能想解决的意外/意外的副作用?我现在是否需要为弹出窗口独自照顾破坏?
关于objective-c - Objective-C:Popover似乎总是无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51561619/