ios - UIWebView 仅在添加到 View 时才起作用

标签 ios objective-c uiwebview nsobject

我想使用 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 即可工作。由于某种原因,我的运行 UIWebViewNSObject 类被 ARC 释放。 我只是在尝试让类将 UIWebView 添加到 View 时才发现这一点,它一直崩溃,但不会给我任何原因或断点。

我最终发现启用僵尸对象,但它提示向已释放的实例发送消息。

无论如何,修复结果是向我的类添加一个 strong 属性引用,以阻止它像这样被释放:

@property (strong, nonatomic) MyWebViewHelper *myWebHelper;

关于ios - UIWebView 仅在添加到 View 时才起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26873038/

相关文章:

ios - 在比较 NSIndexPath 的行和 NSArray 计数时,是否有更好的方法来避免 'Sign comparison' 警告?

objective-c - UIWebView在服务器上加载HTML,如何加载本 map 片?

iphone - 有什么方法可以使用 iOS SDK 将图像上传到 pinterest,也许使用 fileURL?

ios - 在 prepareForSegue : 中传递参数

javascript - iPhone 的点击和鼠标移动?

ios - 如何实现自定义动画天气 MapKit 叠加 - iOS、Swift

ios - Swift:在init的基类版本中调用子类函数

iPhone 读取文件 - 奇怪的行为

objective-c - 如何在 NSStrings 的 NSArray 上使用 NSPredicate 中的键路径?

iphone - 如何获取 UIWebView 上的当前滚动位置