У меня следующий код хорошо работает на Snow Leopard. Он открывает файл, сохраненный во временном каталоге с предпочтительным приложением.
CFURLRef prefAppUrl = nil;
LSGetApplicationForURL((CFURLRef) tempUrl, kLSRolesAll, NULL, &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 . Это приводит к следующей ошибке и Preview (а также 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 с Preview и TextEdit, описывающих, как изменить разрешения для ~ / Library / Containers , но это не решило проблему открытия документов из Какао.
Preview и TextEdit могут без проблем открывать один и тот же файл при использовании искателя, а также с помощью NSTask при выполнении команды open -a "/Applications/Preview.app/Contents/MacOS/Preview" pathToFile, но это не достаточно хорошо для меня, потому что мне нужно выяснить, когда приложение закрывается и open немедленно заканчивается.
Кто-нибудь может указать мне правильное направление, пожалуйста? Я потратил на эти вопросы уже 2 дня. Большое спасибо!