gpt4 book ai didi

iphone - 为 UIWebView 添加模型层(带缓存); UIWebViewNavigationType 和 shouldStartLoadWithRequest 的问题

转载 作者:行者123 更新时间:2023-12-03 19:43:09 24 4
gpt4 key购买 nike

我正在修改向 iPhone 应用程序添加模型层,以便我可以序列化/优先化 HTTP 请求并有选择地缓存响应。感谢 UIWebViewDelegate,以下方法使这变得相当简单(理论上):

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;

基本上,我的代码检查 navigationType,将请求发送到模型,然后返回 NO。反过来,模型层处理请求,并在完成后将数据填充回 UIWebView,使用:

- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL

不幸的是,当将数据推回 UIWebView 时,我经常看到 shouldStartLoadWithRequest 再次被触发(这次的 navigationType 为 5,但使用与原始请求相同的 URL)。我不能依赖模型从缓存中提供此服务(因为 URL 与之前相同),因此我必须让 UIWebView 通过返回 YES 来自行处理它。

我想避免这种情况,以便模型(和缓存层)查看并处理所有请求。有谁知道为什么我在辅助 shouldStartLoadWithRequest 中看到 navigationType 为 5?

最佳答案

我使用与您所追求的完全相同的策略实现了一个应用程序,并且我也遇到了同样的问题。

您看到的导航类型是 UIWebViewNavigationTypeOther。在我的应用程序中,我在初始请求和调用 loadData:MIMEType:textEncodingName:baseURL 产生的请求上都看到了 navigationType。无法根据提供的参数来区分差异。

这个解决方案让我不寒而栗,但它是 100% 可靠的。在实践中,每隔一段时间 webView:ShouldStartLoadWithRequest:navigationType: 被调用时,都是由于我调用了 loadData:MIMEType:textEncodingName:baseURL ,所以我通过创建一个名为 loadCachedData 之类的 BOOL 标志来解决这个问题,并将其在 YES 和 YES 之间切换没有每次 webView:ShouldStartLoadWithRequest:navigationType: 被调用。如果标志是"is",我会让请求通过。否则,我会使用我的缓存。效果非常好。

关于iphone - 为 UIWebView 添加模型层(带缓存); UIWebViewNavigationType 和 shouldStartLoadWithRequest 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1329847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com