沙盒应用和NSOpenPanel导致崩溃

14

我正在我的Cocoa应用程序中使用一个简单的文件打开面板。我启用了赋权和应用程序沙盒。 但是在OS X 10.9上,当应用程序应该使用NSOpenPanel打开对话框时,它会崩溃,并显示以下错误信息:

 

应用程序特定信息:
  未捕获异常 'NSObjectNotAvailableException',原因:由于“service com.apple.appkit.xpc.openAndSavePanelService无法代表初始化NSOpenPanelService实例导致的问题{       "proxy-communications-error" =“Error Domain=NSCocoaErrorDomain Code=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) {
        ...
    }];

有人以前见过这个吗?


请添加产生此错误的代码。 - Beryllium
你最终解决了这个问题吗?我也遇到了完全相同的问题。 - robertmiles3
4个回答

27

确实,您需要在用户选择的文件上特别允许读写权限。 在Xcode 5.1中,这在功能 - 应用程序沙箱下。

输入图像说明


1
非常有帮助!谢谢Jay。 - ixany

3

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

试一试,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) { ... }]; 

to:

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

现在应该可以正常工作了!

我指定了“com.apple.security.files.user-selected.read-write”权限。它只在OS X 10.9上崩溃。 - VKorsun

1
在我的情况下,这个错误的问题是在非主线程上调用[NSOpenPanel openPanel]。将整个内容封装在一个中。
dispatch_async(dispatch_get_main_queue(), ^{
   NSSavePanel *saveAsPanel = [[NSSavePanel alloc] init];
   // ... bla bla...
 });

解决了问题。

0
我的OS X应用程序“Make a Face”在尝试调用简单的文件打开面板时也存在问题。该应用程序不会崩溃,但“选择要打开的文件”窗口开始闪烁,对话框中的像素灯开始跳动,并且鼠标点击的影响延迟在20到40秒之间。非常超现实。这只发生在Mavericks 10.9中。
沙盒授权“com.apple.security.files.user-selected.read-write”已启用,就像应用程序以前的所有上传一样。然而,在Mavericks下,“跳动光线文件打开面板综合症”使得从应用程序内部打开用户选择的JPEG或PNG文件变得非常颠簸。

你最终解决了这个问题吗? - KT_
我也遇到了这个问题。我使用的是Mavericks系统,还没有在其他系统上测试过。但是,第一次打开NSOpenPanel时,它需要很长时间...就像你说的20-40秒。第二次调用它时,似乎就没问题了。这让我疯狂! - robertmiles3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接