我想使用 UIWebView
对网页进行一些操作。
我已将所有必要的 UIWebView 代码添加到 NSObject 类中,但从未调用 UIWebView 委托(delegate)方法,并且它似乎没有执行任何操作全部。
如果我将完全相同的代码传输到 UIViewController
类并将 UIWebView
添加到 View ,则效果很好。
那么,如果 UIWebView 没有添加到 View 中,它还能工作吗?
如何添加零帧或从 NSObject
类中隐藏它?
我确实减少了我的代码(如下),它应该按原样工作,但没有。
MyWebViewHelper.m
@interface MyWebViewHelper () <UIWebViewDelegate>
@property (strong) UIWebView *webview;
@end
- (instancetype)initWithURLString:(NSString *)urlString username:(NSString *)username password:(NSString *)password
{
if ((self = [super init])) {
}
return self;
}
- (void)readPage
{
NSLog(@"%s", __PRETTY_FUNCTION__);
self.webview=[[UIWebView alloc] init];
NSURL *url = [NSURL URLWithString:@"https://www.google.com"];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
_webview.delegate = self;
[_webview loadRequest:requestObj];
}
#pragma mark - UIWebView Delegates
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"Should start loading: %@", [[request URL] absoluteString]);
NSLog(@"Headers: %@",[request allHTTPHeaderFields]);
NSLog(@"Data: %@", [[NSString alloc] initWithData:request.HTTPBody encoding:NSASCIIStringEncoding]);
NSLog(@"Method: %@",[request HTTPMethod]);
return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView
{
NSLog(@"%s", __PRETTY_FUNCTION__);
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
NSLog(@"%s", __PRETTY_FUNCTION__);
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
NSLog(@"%s", __PRETTY_FUNCTION__);
NSLog(@"error:%@", error);
}
最佳答案
我已经找到了解决这个问题的方法。 UIWebView
实际上无需添加到 View 即可工作。由于某种原因,我的运行 UIWebView
的 NSObject
类被 ARC
释放。
我只是在尝试让类将 UIWebView
添加到 View 时才发现这一点,它一直崩溃,但不会给我任何原因或断点。
我最终发现启用僵尸对象,但它提示向已释放的实例发送消息。
无论如何,修复结果是向我的类添加一个 strong
属性引用,以阻止它像这样被释放:
@property (strong, nonatomic) MyWebViewHelper *myWebHelper;
关于ios - UIWebView 仅在添加到 View 时才起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26873038/