沙盒应用和NSOpenPanel导致崩溃

VKo*_*sun 14 cocoa sandbox osx-mavericks

我在我的Cocoa应用程序中做了一个简单的文件打开面板.我启用了权利和应用沙盒.但是在OS X 10.9上,当应用程序使用时打开一个对话框时NSOpenPanel,它会崩溃:

特定于应用程序的信息:
因未捕获的异常'NSObjectNotAvailableException'而终止应用程序,原因:'service com.apple.appkit.xpc.openAndSavePanelService无法代表由于{"proxy-communications-error"="错误而初始化NSOpenPanelService的实例Domain = NSCocoaErrorDomain代码= 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) {
        ...
    }];
Run Code Online (Sandbox Code Playgroud)

谁看过这个吗?

Jay*_*uis 26

实际上,您必须特别允许用户选择文件的读/写权限.在Xcode 5.1中,这是在Capabilities - App Sandbox下.

在此输入图像描述


Ben*_*enz 3

我认为您需要在应用程序权利中激活“用户选择的文件”!

尝试一下,在 xcode 5 beta 中看起来像这样,在 xcode 4 中应该位于项目的常规页面上,您可以在其中激活权利!

让我知道!

- - - - - 编辑

嗯,我认为你的问题在于你如何称呼该小组。

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

NSOpenPanel * openDlg = [NSOpenPanel openPanel];

[openDlg setCanChooseFiles:NO];
[openDlg setAllowsMultipleSelection:NO];
[openDlg setCanChooseDirectories:YES];
[openDlg setCanCreateDirectories:YES];
Run Code Online (Sandbox Code Playgroud)

最后,将对话框“call”更改为:

[self.panel beginSheetModalForWindow:contextWindow completionHandler:^(NSInteger returnCode) { ... }]; 
Run Code Online (Sandbox Code Playgroud)

到:

if ([openDlg runModal] == NSOKButton) 
{ here you manage the user choice. } 
Run Code Online (Sandbox Code Playgroud)

现在应该可以了!