2013-07-29 6 views
13

私はCocoaアプリケーションで簡単なファイルオープンパネルを行っています。私は、資格とアプリのサンドボックスを有効にします。 しかし、アプリがNSOpenPanelを使用してダイアログを開く必要があるときにOS X 10.9上で、それがでクラッシュ:サンドボックスアプリケーションとNSOpenPanelがクラッシュする

アプリケーション固有情報:アプリを終了
キャッチされない例外により「NSObjectNotAvailableException」に、理由:「サービスcom.apple .appkit.xpc.openAndSavePanelServiceが{ "proxy-communications-error" = "エラードメイン= NSCocoaErrorDomainコード= 4099" "\ U041d \ U0435 \ U0443 \ U0434 \ U0430 \ U043bのためにNSOpenPanelServiceのインスタンスを初期化できませんでした¥U043E¥U0441¥U044C¥U0443¥U0441¥U0442¥U0430¥U043D¥U043E¥U0432¥U0438¥U0442¥U044C¥U0441¥U0432¥U044F¥U0437¥U044C¥U0441¥U043F¥U0440¥U043e¥U0433¥U0440¥U0430 \ U043c \ U043c \ U043e \ U0439- \ U043f \ U043e \ U043c \ U043e \ U0449 \ U043d \ U0438 \ U043a \ U043e \ U043c。\ "(接続はこのプロセスから無効になりました)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) { 
     ... 
    }]; 

誰もが前にこれを見ていますか?

+0

を解決し、あなたが今までにこのことを理解しました。このエラー – Beryllium

+0

を作成するコードを追加してください?私はまったく同じ問題を抱えています。 – robertmiles3

答えて

3

あなたは、あなたのアプリエンタイトルメントで「ユーザーが選択したファイル」をアクティブにする必要があると思います!

xcode 5ベータ版で試してみてください。xcode 4は、エンタイトルメントを有効にするプロジェクトの一般ページにある必要があります。

私に教えてください!

---------編集

さて、私はあなたの問題はあなたがパネルを呼び出す方法であると思います。それが動作するようになりました

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

:に

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

:最後に、からの "呼び出し" ダイアログを変更

NSOpenPanel * openDlg = [NSOpenPanel openPanel]; 

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

まず、とのパネルを初期化します!

+0

私は** "com.apple.security.files.user-selected.read-write" **資格を指定します。 OS X 10.9でのみクラッシュします。 – VKorsun

+0

私は自分の答えを編集しました。 – Benz

0

「Make a Face」は、簡単なファイルを開くパネルを呼び出すときに問題があります。アプリケーションがクラッシュすることはありませんが、「開くファイルを選択」ウィンドウがちらつき始めると、ダイアログボックスのピクセルライトが揺れ始め、マウスのクリックは20〜40秒の間のどこからでも影響が遅れます。非常にシュール。これはMavericks 10.9でのみ発生します。

サンドボックスの権利 "com.apple.security.files.user-selected.read-write"は、以前のすべてのアプリケーションのアップロードのために有効になっています。しかし、マーベリックスの下では、 "動揺するライトファイルのオープンパネル症候群"は、アプリ内から選択されたJPEGまたはPNGファイルを非常にうんざりに開くことになります。

+0

あなたはこれに決着をしたことがありますか? –

+0

私もこれを見ています。私はマーベリックスで、他の何かでそれをテストすることができませんでした。しかし、NSOpenPanelを初めて開くときは、20-40秒と言ったように、永遠に*かかります。私はそれを呼び出す2回目、それはちょうど良いと思われる。私を夢中にさせる! – robertmiles3

26

実際、ユーザーが選択したファイルに対して読み取り/書き込みのアクセス許可を特に許可する必要があります。 Xcode 5.1では、Capabilities - App Sandboxの下にあります。

enter image description here

+0

Incredibily helpful!ありがとう、ジェイ。 – ixany

+0

これは私の場合の正解です。ありがとうございました! – Jim75

0

私の場合はこのエラーの問題が主なものではなかったのスレッドで[NSOpenPanel openPanel]を呼んでいました。

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

内全体をカプセル化問題

関連する問題