Как открыть pdf / jpg в режиме предварительного просмотра с помощью NSTask на Lion?

#cocoa #osx-lion #nstask

#cocoa #osx-lion #nstask

Вопрос:

У меня есть следующий код, который хорошо работает на Snow Leopard. Он открывает файл, хранящийся во временном каталоге с предпочтительным приложением.

         CFURLRef prefAppUrl = nil;
        LSGetApplicationForURL((CFURLRef) tempUrl, kLSRolesAll, NULL, amp;prefAppUrl);

        NSBundle *bundle = [NSBundle bundleWithURL:(NSURL*)prefAppUrl];
        NSString *path = [bundle executablePath];

        NSTask *task = [[NSTask alloc] init];
        [task setLaunchPath:path];
        [task setArguments:[NSArray arrayWithObject:[tempUrl path]]];
        [task launch];
  

Но это вообще не работает на Lion. Это приводит к следующей ошибке, и предварительный просмотр (а также TextEdit) показывает диалоговое окно с ошибкой. Другие редакторы работают хорошо (например, TextMate).

 011-10-11 16:29:36.867 Preview[11340:60b] PVPDFPageContainer initWithURL:file://localhost/var/folders/vt/pjtj7vg54x950234v__4363m0000gn/T/1dc07081-837d-4ecf-b4c3-9aefe92c3a16.pdf failed, error = Error Domain=NSCocoaErrorDomain Code=257 "The file “1dc07081-837d-4ecf-b4c3-9aefe92c3a16.pdf” couldn’t be opened because you don’t have permission to view it." UserInfo=0x100363fe0 {NSFilePath=/var/folders/vt/pjtj7vg54x950234v__4363m0000gn/T/1dc07081-837d-4ecf-b4c3-9aefe92c3a16.pdf, NSUnderlyingError=0x100363f80 "The operation couldn’t be completed. Operation not permitted"}
11.10.2011 16:30 
2011-10-11 16:28:37.517 Preview[11304:60b] PVPDFPageContainer initWithURL:file://localhost/private/var/folders/vt/pjtj7vg54x950234v__4363m0000gn/T/c0df6d94-49c9-4ce2-a362-8ec0e04d5104.pdf failed, error = Error Domain=NSCocoaErrorDomain Code=257 "The file “c0df6d94-49c9-4ce2-a362-8ec0e04d5104.pdf” couldn’t be opened because you don’t have permission to view it." UserInfo=0x7fec32a680e0 {NSFilePath=/private/var/folders/vt/pjtj7vg54x950234v__4363m0000gn/T/c0df6d94-49c9-4ce2-a362-8ec0e04d5104.pdf, NSUnderlyingError=0x7fec32a68080 "The operation couldn’t be completed. Operation not permitted"}
  

Я нашел много подсказок, как исправить проблемы Lion с предварительным просмотром и TextEdit, описывающих, как изменить разрешения для ~/Library/Containers, но это не решило проблему открытия документов из Cocoa.

Preview и TextEdit могут без проблем открывать один и тот же файл при использовании finder, а также при использовании NSTask при открытии команды — выдается файл пути «/ Applications/Preview.app /Contents / macOS / Preview», но для меня этого недостаточно, потому что мне нужно выяснить, когда приложениезакрывается и сразу же открывается.

Кто-нибудь может указать мне правильное направление, пожалуйста? Я потратил на эти проблемы уже 2 дня. Большое вам спасибо!

Ответ №1:

Вы могли бы просто использовать:

 [[NSWorkspace sharedWorkspace] openURL: 'URL to PDF'];
  

Это работает нормально.

Комментарии:

1. Да, это работает и является хорошим решением для других, но мне нужно знать, когда файл был закрыт (приложение было закрыто), чтобы я мог зашифровать его и удалить временный файл. NSWorkspace не дает мне такой возможности.