2013-07-29 24 views
13

我正在做我的Cocoa應用程序中的簡單文件打開面板。我啓用權利和應用程序沙盒。 但在OS X 10.9,當應用程序應該打開使用NSOpenPanel一個對話框,它與崩潰:沙盒應用程序和NSOpenPanel導致崩潰

特定應用信息:
終止應用程序由於未捕獲的異常「NSObjectNotAvailableException」,理由是:「服務com.apple .appkit.xpc.openAndSavePanelService無法代表由於{proxy-communications-error「=」錯誤域= NSCocoaErrorDomain代碼= 4099 \「\ U041d \ U0435 \ U0443 \ U0434 \ U0430 \ U043b代表NSOpenPanelService的一個實例\ U0443 \ U0441 \ U0442 \ U0430 \ U043 \ U043 \ 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 beta中看起來像這樣,在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. } 

應該現在的工作!

+0

我指定**「com.apple.security.files.user-selected.read-write」**授權。它只在OS X 10.9上崩潰。 – VKorsun

+0

我編輯了我的答案,查看它的隊友! – Benz

0

我的OS X應用程序「Make a Face」在試圖調用簡單文件打開面板時也有問題。該應用程序不會崩潰,但「選擇要打開的文件」窗口開始閃爍,對話框中的像素燈開始跳動,並且鼠標點擊從20到40秒之間的任何地方產生延遲影響。非常超現實。這隻發生在小牛10.9。

已啓用沙箱權利「com.apple.security.files.user-selected.read-write」,因爲它已用於所有以前上傳的應用程序。然而,在小牛隊之下,「跳動的輕型文件開放式面板綜合症」使得在應用程序內打開用戶選擇的JPEG或PNG文件非常顛簸。

+0

你有沒有找到這個決議? –

+0

我也看到了。我在小牛身上,無法在其他方面進行測試。但是,我第一次打開一個NSOpenPanel,它需要*永遠* ...就像你說的20-40秒。我第二次稱它,它似乎很好。快把我逼瘋! – robertmiles3

26

的確,您必須特別允許用戶選定文件的讀/寫權限。在Xcode 5.1中,這在Capabilities - App Sandbox下。

enter image description here

+0

難以置信的幫助!謝謝Jay。 – ixany

+0

這是我的情況的正確答案。謝謝! – Jim75

0

在我的情況下,該錯誤的問題上一個線程,這不是主要的一個叫[NSOpenPanel openPanel]。封裝整個事情裏面

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

解決了這個問題