1

現在、アプリをサンドボックス化しようとしていますが、NSOpenPanel で奇妙な問題が発生しています。現在、NSOpenPanel を表示しようとすると、次のエラーが発生します。

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

サンドボックスを有効にすると、OS は NSOpenPanel の代わりに NSRemoteOpenPanel を使用し、このクラスは NSOpenPanel から直接継承せず、すべてのメソッドを実装しない可能性があることを説明する他の投稿を読みました。これについて話しているstackoverflowの投稿は次のとおりです。

app-sandboxing を使用した Cocoa アプリの NSOpenPanel でエラーが発生する

これですべて問題ありませんが、サンドボックス化された NSOpenPanel で使用できないメソッドをどのように知ることができるのでしょうか。NSRemoteOpenPanel に関する公開ドキュメントはないようです。

4

1 に答える 1

2

パネルの意図に沿った基本的な操作 (ファイル/ディレクトリの取得、フィルターの指定など) を当てにすることができます。最も具体的には、NSSavePanel と NSOpenPanel で定義されたメソッドのみを使用できます。アプリはウィンドウを制御できないため、基本的なウィンドウ機能をコーディングしないでください。

Appleのドキュメントから:

NSOpenPanel または NSSavePanel オブジェクトは、アプリ サンドボックスでより少ないメソッドを継承します。NSOpenPanel または NSSavePanel オブジェクトにメッセージを送信しようとして、そのメソッドが NSPanel、NSWindow、または NSResponder クラスで定義されている場合、システムは例外を発生させます。Xcode コンパイラは、この実行時の動作を警告する警告やエラーを発行しません。

パネルとして表示するために直接呼び出している場合は、代わりにopenFrontNSSavePanel を使用してくださいbeginWithCompletionHandler:

于 2013-03-11T19:45:09.703 に答える