1

我目前正在用可可编写 SketchApp 插件。

我尝试在NSPopover那里使用 a,它应该IBAction在单击按钮时由 a 触发。问题是:弹出框没有出现,并且在检查变量时,应该保存弹出框,它是nil.

NSPopover在 Interface Builder 中创建了,所以不是在代码中以编程方式创建的;然后在我的链接类头文件中定义一个IBOutlet绑定;最后在我的实现类中使用这个变量。

这是我的源代码:

我的组件.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

我的组件.m

-(IBAction)onCopyButton_Clicked:(id)sender {

    // copy stuff to clipboard
    // [...]

    // show copied popover
    [_popover showRelativeToRect:[sender bounds] 
                          ofView:sender 
                   preferredEdge:NSMinYEdge];
}

在我的xib-view-file 中,我将 NSPopover-Object 链接到IBOutlet NSPopover *popover;. 但是_popover在我的类实现中检查时,它总是nil.

4

1 回答 1

1

好吧,经过一番折腾,我想我终于明白出了什么问题。将内存模式从@property (nonatomic, weak) NSPopover *popover;更改... (nonatomic, strong) ...;为实例后nil不再存在。

我认为NSButton(例如)这里的区别在于,该按钮用于xib 模板中,因此按钮的引用不会被清理。然而,Popover 并不是直接“使用”的,因此它可能会在实际使用之前被清理干净。因此,将其从 更改weakstrong似乎是这里的重点。

但是:此调整是否有我可能想以某种方式解决的意外/意外副作用?我现在必须自己处理弹出窗口的破坏吗?

于 2018-07-28T08:41:57.253 回答