1

我目前正在尝试对我的应用程序进行沙箱处理,并且遇到了 NSOpenPanel 的一些奇怪问题。当我尝试显示我的 NSOpenPanel 时,我目前收到以下错误:

Error:  Objective-C runtime exception: 
-[NSRemoteOpenPanel orderFront:]: unrecognized selector sent to instance 0x16a1630

我已经阅读了一些其他帖子,这些帖子解释了当您启用沙盒时,操作系统将使用 NSRemoteOpenPanel 而不是 NSOpenPanel,并且此类可能不会直接从 NSOpenPanel 继承,并且可能不会实现其所有方法。这是一个讨论这个的stackoverflow帖子:

带有应用沙盒功能的 Cocoa 应用程序中的 NSOpenPanel 出现错误

现在这一切都很好,但我想知道如何知道哪些方法不能与沙盒化的 NSOpenPanel 一起使用。似乎没有关于 NSRemoteOpenPanel 的公开文档。

4

1 回答 1

2

您可以依靠围绕面板意图进行的基本操作(获取文件/目录、指定过滤器等)。更具体地说,只有在 NSSavePanel 和 NSOpenPanel 中定义的方法可供您使用。您不应围绕基本窗口功能进行编码,因为您的应用程序无法控制窗口。

来自 Apple 的文档:

NSOpenPanel 或 NSSavePanel 对象继承的 App Sandbox 方法更少。如果您尝试向 NSOpenPanel 或 NSSavePanel 对象发送消息,并且该方法在 NSPanel、NSWindow 或 NSResponder 类中定义,系统会引发异常。Xcode 编译器不会发出警告或错误来提醒您注意此运行时行为。

如果您直接调用openFront以将其显示为面板,请改用 NSSavePanel beginWithCompletionHandler:

于 2013-03-11T19:45:09.703 回答