2013-03-27 50 views
1

我有与加载像这样一个简单的请求一个UIWebView:UIWebView的承载性能不会改变

NSMutableURLRequest *theRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"derp.com"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:15.0]; 
[webView loadRequest:theRequest]; 

我有在web视图执行一些JavaScript的另一种方法。这个方法可以从不同的来源多次调用(包括webViewDidFinishLoad和viewDidAppear)。为了防止错误,我已经在if语句包裹这就像这样:

if (!self.webView.loading) { 
    ... do stuff.... 
} 

问题是self.webView.loading始终是0。我甚至试图建立一个观察者(尝试了几种不同的变化。 ...不是100%确定的sytnax):

[self addObserver:self forKeyPath:@"webView.loading" options:0 context:NULL]; 

但observeValueForKeyPath:ofObject:change:context:永远不会被调用。

+1

你是否确定你并不总是重新实例化Web视图? 2.意识到'if()'不会轮询属性(因为它不是循环)? – 2013-03-27 16:52:18

+0

1.是的。是的。如果webView正在加载,则回调会触发javaScript执行。如果第一次调用方法时没有加载,那么这意味着回调不会被触发。 – 2013-03-27 17:23:37

+0

似乎你正试图检查Web视图正在加载在下一行改变你已经调用了loadRequest:在webview实例上,但asfaras我知道一旦你获得委托回调webView:didStartLoading或webView会加载标志:只有didFinishLoading! HTH :) – 2016-03-03 12:59:41

回答

1

更好地实现UIWebViewDelegate方法...

设置委托在viewDidLoad中:

[webView setDelegate:self]; 

您可以使用

- (void)webViewDidFinishLoad:(UIWebView *)webView { //做的事情一旦被装入}`

在负载完成时接到电话,并且比用KVO搞乱更可靠。

+0

在这种情况下,我无法做到这一点。 webview依赖于通过javascript执行注入的一些objective-c变量。这些变量在内容被提取后改变,如果这是有意义的。 – 2013-03-27 17:18:13

+0

嗯,这将是有问题的,因为我从来没有能够成功地使用加载属性,并依赖于代表。会考虑一下...... – Cocoadelica 2013-03-28 10:28:16

0

通过查看UIWebView doc

isLoading = YES如果接收机仍在加载的内容;否则,否。 那么,是否有可能在这一点上,你的web视图的加载已经完成?

+0

我用NSLog试图弄清楚何时何地isLoading是真实的,但它从来没有过。 – 2013-03-27 17:19:04

+0

然后你应该实现UIWebView的委托,并在-webViewDidFinishLoad中输入BOOL属性时设置为YES:并且测试这个BOOL值而不是webView.isLoading – KIDdAe 2013-03-27 17:22:25

+0

这就是我最终做的事......但我认为那是整个UIWebView上的加载属性点? – 2013-03-27 21:15:01