我想使用UIWebView
对网页进行一些操作。
我已将所有必需的UIWebView
代码添加到NSObject
类,但UIWebView
委托方法从未被调用过,而且似乎根本没有做任何事情。
如果我将完全相同的代码转移到UIViewController
类并将UIWebView
添加到视图中,则效果正常。
如果UIWebView没有添加到视图中,它甚至可以工作吗?
如何使用零帧添加或隐藏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);
}
答案 0 :(得分:5)
我找到了解决方法。 UIWebView
实际上确实可以在不添加到视图的情况下工作。由于某些原因,我NSObject
运行UIWebView
的{{1}}类已被ARC
解除分配。
我只是在尝试让类将UIWebView
添加到视图时发现它并且它一直崩溃但不会给我任何理由或断点。
我最终想出了启用僵尸对象,它抱怨发送消息到解除分配的实例。
无论如何,修复结果是在我的类中添加strong
属性引用以阻止它被解除分配:
@property (strong, nonatomic) MyWebViewHelper *myWebHelper;