#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 не дает мне такой возможности.