Ios UIWebView仅在添加到视图时有效

Ios UIWebView仅在添加到视图时有效,ios,objective-c,uiwebview,nsobject,Ios,Objective C,Uiwebview,Nsobject,我想使用UIWebView对网页进行一些操作。 我已将所有必要的UIWebView代码添加到NSObject类中,但从未调用UIWebView委托方法,而且它似乎什么都不做 如果我将完全相同的代码传输到UIViewController类,并将UIWebView添加到视图中,则效果良好 那么,如果UIWebView没有添加到视图中,它还能工作吗? 如何添加零帧或隐藏在NSObject类中 我真的减少了我的代码(如下),它应该可以正常工作,但不能 MyWebViewHelper.m @interfa

我想使用
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);
}
@interface MyWebViewHelper()
@属性(强)UIWebView*webview;
@结束
-(instancetype)initWithURLString:(NSString*)urlString用户名:(NSString*)用户名密码:(NSString*)密码
{
if((self=[super init])){
}
回归自我;
}
-(作废)阅读页
{
NSLog(@“%s”,函数);
self.webview=[[UIWebView alloc]init];
NSURL*url=[NSURL URLWithString:@”https://www.google.com"];
NSURLRequest*requestObj=[nsurlRequestRequestWithURL:url];
_webview.delegate=self;
[_webviewloadrequest:requestObj];
}
#pragma标记-UIWebView代理
-(BOOL)webView:(UIWebView*)webView应加载WithRequest:(NSURLRequest*)请求导航类型:(UIWebViewNavigationType)导航类型
{
NSLog(@“应开始加载:%@,[[请求URL]绝对字符串]);
NSLog(@“头:%@,[请求所有HttpHeaderFields]);
NSLog(@“Data:%@,[[NSString alloc]initWithData:request.HTTPBody编码:NSASCIIStringEncoding]);
NSLog(@“方法:%@,[request HTTPMethod]);
返回YES;
}
-(void)webView加载:(UIWebView*)webView
{
NSLog(@“%s”,函数);
}
-(无效)webViewDidFinishLoad:(UIWebView*)webView
{
NSLog(@“%s”,函数);
}
-(void)webView:(UIWebView*)webView失败加载错误:(NSError*)错误
{
NSLog(@“%s”,函数);
NSLog(@“错误:%@”,错误);
}

我找到了解决这个问题的方法
UIWebView
实际上不需要添加到视图中就可以工作。出于某种原因,
ARC
正在解除分配运行
UIWebView
的我的
NSObject
类。 我只是在试图让类将
UIWebView
添加到视图时才发现这一点,它一直崩溃,但没有给出任何原因或断点

我最终找到了启用僵尸对象的方法,它抱怨说向一个解除分配的实例发送了一条消息

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

@property (strong, nonatomic) MyWebViewHelper *myWebHelper;

您以前是怎么做的-没有将其添加到UIViewController中?就像任何UIView一样,它必须被添加到VC中才能被看到。我不需要它被看到。我只需要使用UIWebView在页面上运行一些javascript。但是它似乎不会加载页面,除非它被添加到视图中。啊,不,它不是这样工作的。您是否尝试过
stringByEvaluatingJavaScriptFromString
?这正是我需要使用的,但它需要一个UIWebView来首先加载页面,除非添加到视图中,否则这种情况似乎不会发生。启动一个NSURLRequest来获取页面内容,然后执行它怎么样?