Подтвердить что ты не робот

Sandboxed app & NSOpenPanel вызывает сбои

Я делаю простую открытую панель в приложении Cocoa. Я разрешаю права и песочницу приложений. Но в OS X 10.9, когда приложение должно открыть диалог с помощью NSOpenPanel, он сработает с помощью:

Информация о приложении:
Завершение приложения из-за неотображенного исключения "NSObjectNotAvailableException", причина: "service com.apple.appkit.xpc.openAndSavePanelService не удалось запустить экземпляр NSOpenPanelService от имени из-за {     msgstr" Прокси-связь-ошибка "=" Ошибка домена = NSCocoaErrorDomain Code =\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) {
        ...
    }];

Кто-нибудь видел это раньше?

4b9b3361

Ответ 1

В самом деле, вы должны специально разрешать разрешения на чтение/запись для выбранных пользователем файлов. В Xcode 5.1 это находится в разделе "Возможности" - "Песочница приложений".

enter image description here

Ответ 2

Я думаю, что вам нужно активировать "Пользовательский файл" в ваших правах на приложение!

Попробуйте, в xcode 5 бета выглядит так: в 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. } 

Теперь он должен работать!

Ответ 3

My OS X app "Make a Face" также имеет проблемы при попытке вызвать панель открытого файла. Приложение не разбивается, но окно "выбрать файл для открытия" начинает мерцать, свет в диалоговом окне начинает пульсировать, а щелчки мыши имеют отложенный эффект от где-либо между 20 и 40 секундами. Очень сюрреалистично. Это происходит только в Mavericks 10.9.

Право на использование песочницы "com.apple.security.files.user-selected.read-write" включено, как и для всех предыдущих загрузок приложения. Тем не менее, под Mavericks, "пульсирующий световой файл синдрома открытой панели" делает открытие пользователем выбранного JPEG или PNG файла из приложения очень неустойчивым.

Ответ 4

В моем случае проблема для этой ошибки вызывала [NSOpenPanel openPanel] в потоке, который не был основным. Инкапсулируя все это внутри

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

решил проблему