簡體   English   中英

沙盒應用和NSOpenPanel導致崩潰

[英]Sandboxed app & NSOpenPanel causes crashes

我在我的Cocoa應用程序中做了一個簡單的文件打開面板。 我啟用了權利和應用沙盒。 但是在OS X 10.9上,當應用程序使用NSOpenPanel打開一個對話框時,它會崩潰:

特定應用信息:
因未捕獲的異常“NSObjectNotAvailableException”而終止應用程序,原因:'service com.apple.appkit.xpc.openAndSavePanelService無法代表由於{“proxy-communications-error”=“Error Domain = NSCocoaErrorDomain Code”而初始化NSOpenPanelService的實例= 4099 \\“\\ U041d \\ U0435 \\ U0443 \\ U0434 \\ U0430 \\ U043b \\ 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) {
        ...
    }];

誰看過這個嗎?

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

在此輸入圖像描述

我認為您需要在應用程序權利中激活“用戶選擇的文件”!

嘗試一下,在xcode 5 beta看起來像這樣,在xcode 4應該在你項目的一般頁面上,你激活權利!

讓我知道!

---------編輯

好吧,我認為你的問題在於如何調用面板。

首先,使用以下命令初始化面板:

NSOpenPanel * openDlg = [NSOpenPanel openPanel];

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

最后,從以下位置更改對話框“call”:

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

至:

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

它現在應該工作!

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

Sandbox權利“com.apple.security.files.user-selected.read-write”已啟用,因為它已用於以前上傳的應用程序。 然而,在Mavericks的情況下,“悸動光文件開放式面板綜合症”使用戶在應用程序中打開用戶選擇的JPEG或PNG文件非常顛簸。

在我的情況下,這個錯誤的問題是在一個不是主線程的線程上調用[NSOpenPanel openPanel] 封裝整個東西

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

解決了這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM