是否可以继承NSSavePanel?

时间:2013-10-09 19:48:48

标签: objective-c cocoa subclass nssavepanel

我想知道是否有一种子类NSSavePanel的方法。或者如果你要创建一个虚拟对象,你将如何模仿NSSavePanel的beginSheetModalForWindow:CompletionHandler函数?

-(void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void (^)(NSInteger *))handler{

在实现.m类文件中的函数时,我正在讨论如何实现块处理程序。

1 个答案:

答案 0 :(得分:3)

简答:否

更长的答案:这里是龙?

有可能但事情可能会破裂。您还可以使用类别添加方法,它们可能有效,或者可能无法使用。由于NSOpenPanel被实现以支持App Sandbox的方式出现了问题 - 各种诡计在幕后进行,甚至方便类别方法只调用类上的现有方法可能导致OS X报告错误,对话框不报告出现。 NSOpenPanel是一种精致的生物,应该尽可能少地触摸,只有非常小心。

将NSOpenPanel实例包装在另一个类中是一个不同的故事,不应该打扰它。走那条路。

补遗:评论

beginSheetModalForWindow的声明是:

- (void)beginSheetModalForWindow:(NSWindow *)window completionHandler:(void (^)(NSInteger result))handler

完成处理程序传递一个值,指示按下了哪个按钮。要采取相应的行动,您可以使用标准if

NSOpenPanel *openPanel;
NSWindow *hostWindow;
...
[openPanel beginSheetModalForWindow:hostWindow
                  completionHandler:^(NSInteger returnCode)
                                    {
                                       if (returnCode == NSFileHandlingPanelOKButton)
                                       {
                                          // OK pressed
                                          ...
                                       }
                                       else
                                       {
                                          // Cancel pressed
                                          ...
                                       }

                                    }
];