我有以下代码在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天时间在这个问题上。非常感谢你!
答案 0 :(得分:1)
你可以简单地使用:
[[NSWorkspace sharedWorkspace] openURL: 'URL to PDF'];
工作正常。