UIWebView仅在添加到视图时有效

时间:2014-11-11 19:35:41

标签: ios objective-c uiwebview nsobject

我想使用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);
}

1 个答案:

答案 0 :(得分:5)

我找到了解决方法。 UIWebView实际上确实可以在不添加到视图的情况下工作。由于某些原因,我NSObject运行UIWebView的{​​{1}}类已被ARC解除分配。 我只是在尝试让类将UIWebView添加到视图时发现它并且它一直崩溃但不会给我任何理由或断点。

我最终想出了启用僵尸对象,它抱怨发送消息到解除分配的实例。

无论如何,修复结果是在我的类中添加strong属性引用以阻止它被解除分配:

@property (strong, nonatomic) MyWebViewHelper *myWebHelper;