1

我尝试了下面的代码,它对我来说工作正常。也能够启动邮件应用程序。

//Note the below path is coming from bundle identifier of Mail APP 
NSString *path=@"/Applications/Mail.app"
NSURL *mailURL = [NSURL URLWithString:path];
NSError *err=nil;
[[NSWorkspace sharedWorkspace] launchApplicationAtURL:mailURL
                                              options:NSWorkspaceLaunchDefault
                                        configuration: someData
                                                error:&err];

但它在控制台上向我抛出了以下错误消息,它实际上意味着什么。如何解决以下问题。

CFURLCopyResourcePropertyForKey failed because it was passed this URL which has no scheme: /Applications/Mail.app
4

1 回答 1

1

引发错误是因为您没有创建有效的 URL。URL 需要一个方案,在您的情况下它是 file: 所以正确的 URL 是file:///Applications/Mail. 您需要创建一个文件 URL,其工作方式如下:

NSString *path=@"/Applications/Mail.app";
NSURL *mailURL = [NSURL fileURLWithPath:path];

请注意,如果用户将 Mail.app 移动到另一个位置,您的代码会中断。另请注意,如果用户不使用 Apple 的 Mail 应用程序,它也不会很好地为用户工作。

这里给出了一种更正确的方法:How to launch New Message window in Mail.app from my application

另一种选择是以更灵活的方式获取 Mail.app 的 URL,以覆盖已移动 Mail.app 的用户。这个想法是使用捆绑标识符,然后要求NSWorkspace通过使用启动此应用程序

- (BOOL)launchAppWithBundleIdentifier:(NSString *)bundleIdentifier
                          options:(NSWorkspaceLaunchOptions)options
   additionalEventParamDescriptor:(NSAppleEventDescriptor *)descriptor
                 launchIdentifier:(NSNumber **)identifier

(也可以在这里详细查看http://theocacao.com/document.page/183)。

于 2015-05-07T06:49:52.530 回答