NSWorkspace 在启动邮件应用程序时抛出错误
NSWorkspace throws error when launch the mail application
我试过下面的代码,它对我来说工作正常。也可以启动邮件应用程序。
//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
抛出错误是因为您没有创建有效的 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
我试过下面的代码,它对我来说工作正常。也可以启动邮件应用程序。
//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
抛出错误是因为您没有创建有效的 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