Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa NSWorkspace在启动邮件应用程序时引发错误_Cocoa_Nsworkspace - Fatal编程技术网

Cocoa NSWorkspace在启动邮件应用程序时引发错误

Cocoa NSWorkspace在启动邮件应用程序时引发错误,cocoa,nsworkspace,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] launchApplicatio

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

//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需要一个方案,在您的例子中是file:因此正确的URL是
file:///Applications/Mail
。您需要创建一个文件URL,其工作方式如下:

NSString *path=@"/Applications/Mail.app";
NSURL *mailURL = [NSURL fileURLWithPath:path];
请注意,如果用户将Mail.app移动到其他位置,则您的代码将中断。还要注意的是,如果用户不使用苹果的邮件应用程序,它对用户也不会起作用

这里给出了一种更正确的方法:

另一个选择是以更灵活的方式获取Mail.app的URL,覆盖移动了Mail.app的用户。其思想是使用bundle标识符,然后要求
NSWorkspace
使用

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

(请参见此处的详细信息)。

感谢您的回答,但我们已经定义了捆绑包标识符。它也可以工作,但只是抛出了一条警告消息。我还想发送Web HTML数据。因此,它将启动包含webView内容的邮件应用程序。但是,如果使用OpenURL,那么它将没有帮助。它抛出警告是有原因的,因为它不是一个有效的文件URL。查看我的答案。当我使用fileURLWithPath时,它不会向我抛出警告消息。我认为这就是解决这个警告的方法。谢谢