3

我的 iPhone 应用程序(支持 iOS 6+)有一个 Web 视图,其中列出了每个事件的“添加到日历”按钮。“添加到日历”按钮是指向服务器上 .ics 文件的超链接。我已修改 IIS 以使用“文本/日历”作为 .ics 文件的 MIME 类型,并在我的 UIWebView 委托的 shouldStartLoadWithRequest 中使用以下代码:当请求 URL 包含“.ics”路径扩展名时

[[UIApplication sharedApplication] openURL:ics_url];

当点击事件的“添加到日历”按钮时,我得到“无法订阅!事件名称!来自!环境路径!”。但是,我可以在设备的 Safari 浏览器中打开该文件。

所以我尝试了一些没有奏效的东西

1) 将文件内容加载到 NSData 并尝试通过使用在 webview 中加载数据

试过这个 -

[mywebview loadData:webData MIMEType:@"text/calendar" textEncodingName:@"utf-8" baseURL:RequestURL];

和这个 -

[myWebView loadData:webData MIMEType:@"text/calendar" textEncodingName:@"utf-8" baseURL:nil];

-- 当我 NSLog 时,我可以看到文件内容。但是 webview:didFailLoadWithError 被调用并且没有加载。如果我将 MIME 类型更改为 text/html,webview 会加载 vcalendar 文件的文本。

2)下载文件内容并保存到文档目录并尝试打开文件

[webDataString writeToFile:pathToFileInDocumentDirectory atomically:NO encoding:4 error:&error];
[myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:pathToFileInDocumentDirectory]]];

-- 再次,文件内容被正确保存。我可以重新加载它们并查看内容。但是 Web 视图不会加载请求。

3)我什至试过这个在canOpenUrl失败(如预期的那样)

if ([[UIApplication sharedApplication] canOpenURL:[NSURL fileURLWithPath:pathToFileInDocumentDirectory]]) {
                    [[UIApplication sharedApplication] openURL:[NSURL fileURLWithPath:pathToFileInDocumentDirectory]];
                }

帮助!!!

4

1 回答 1

1

问题似乎是 webcal(必须使用 https,而不是)协议和在 IIS 上完成 MIME 类型设置的方式的组合。幸运的是,我不必探索实现这一目标的其他方法。

[[UIApplication sharedApplication] openURL:ics_url]; 

以上似乎工作。

于 2013-10-29T22:04:34.457 回答