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来获取页面内容,然后执行它怎么样?