我目前正在为可可写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/

10-09 16:28