启动邮件应用程序时,NSWorkspace会引发错误

时间:2015-05-07 02:32:56

标签: cocoa nsworkspace

我尝试了以下代码,它对我来说很好。也可以启动邮件应用程序。

//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

1 个答案:

答案 0 :(得分:1)

因为您没有创建有效的URL而引发错误。 URL需要一个方案,在您的情况下它是文件:所以正确的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)。