14

Cocoa アプリで単純なファイルを開くパネルを作成しています。資格とアプリのサンドボックス化を有効にします。しかし、OS X 10.9 では、アプリが を使用してダイアログを開く必要があるときに、次のNSOpenPanelようにクラッシュします。

アプリケーション固有の情報:
キャッチされていない例外 'NSObjectNotAvailableException' が原因でアプリを終了しています。ドメイン=NSCocoaErrorドメイン コード=4099 \"\U041d\U0435 \U0443\U0434\U0430\U043b\U043e\U0441\U044c \U0443\U0441\U0442\U0430\U043d\U043e\U0432\U0438\U0442U\U0442U\U0442 \U044f\U0437\U044c \U0441 \U043f\U0440\U043e\U0433\U0440\U0430\U043c\U043c\U043e\U0439-\U043f\U043e\U043c\U043e\U0449\U043d\U043e. \" (このプロセスから接続が無効化されました。) UserInfo=0x61000047dc00 {NSDebugDescription=このプロセスから接続が無効化されました。}"; }'

ソース:

self.panel = [NSOpenPanel openPanel];
panel.delegate = self;
panel.canChooseDirectories = YES;
panel.canChooseFiles = NO;
panel.canCreateDirectories = YES;
panel.allowsMultipleSelection = NO;
[self.panel beginSheetModalForWindow:contextWindow completionHandler:^(NSInteger returnCode) {
        ...
    }];

誰もこれを見たことがありますか?

4

4 に答える 4

26

実際、ユーザーが選択したファイルに対する読み取り/書き込み権限を具体的に許可する必要があります。Xcode 5.1 では、これは Capabilities - App Sandbox の下にあります。

ここに画像の説明を入力

于 2014-05-06T14:11:50.247 に答える
3

アプリの資格で「ユーザーが選択したファイル」を有効にする必要があると思います!

試してみてください。xcode 5 ベータ版では次のように表示されます。xcode 4 では、プロジェクトの一般ページにある必要があります。ここで、資格をアクティブ化します。

お知らせ下さい!

- - - - - 編集

さて、あなたの問題は、パネルの呼び出し方にあると思います。

まず、パネルを次のように初期化します。

NSOpenPanel * openDlg = [NSOpenPanel openPanel];

[openDlg setCanChooseFiles:NO];
[openDlg setAllowsMultipleSelection:NO];
[openDlg setCanChooseDirectories:YES];
[openDlg setCanCreateDirectories:YES];

最後に、ダイアログの「呼び出し」を次のように変更します。

[self.panel beginSheetModalForWindow:contextWindow completionHandler:^(NSInteger returnCode) { ... }]; 

に:

if ([openDlg runModal] == NSOKButton) 
{ here you manage the user choice. } 

今すぐうまくいくはずです!

于 2013-08-22T11:07:29.680 に答える
1

私の場合、このエラーの問題[NSOpenPanel openPanel]は、メインスレッドではないスレッドで呼び出していました。中にすべてをカプセル化する

dispatch_async(dispatch_get_main_queue(), ^{
   NSSavePanel *saveAsPanel = [[NSSavePanel alloc] init];
   // ... bla bla...
 });

問題を解決しました

于 2016-10-09T02:28:12.590 に答える