如何在Lion上使用NSTask在预览中打开pdf / jpg?

时间:2011-10-13 13:42:20

标签: cocoa osx-lion nstask

我有以下代码在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 上根本不起作用。它导致跟随错误和预览(以及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"}

我已经找到了许多提示,如何使用Preview和TextEdit修复Lion问题,描述如何更改〜/ Library / Containers 的权限,但这并没有解决从Cocoa打开文档的问题。

预览和TextEdit在使用finder时可以毫无问题地打开同一个文件,当命令 open -a“/Applications/Preview.app/Contents/MacOS/Preview"pathToFile 时也可以使用NSTask发布,但这对我来说不够好,因为我需要找出应用程序何时关闭并且 open 立即结束。

有人能指出我正确的方向吗?我已经花了2天时间在这个问题上。非常感谢你!

1 个答案:

答案 0 :(得分:1)

你可以简单地使用:

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

工作正常。