2014-11-11 4 views
1

Я хочу использовать UIWebView, чтобы сделать некоторые манипуляции с веб-страницей. Я добавил весь необходимый код UIWebView в класс NSObject, но методы делегатов UIWebView никогда не вызываются и, похоже, ничего не делают.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

Как вы делали это раньше, - не добавляя его в UIViewController? Как и любой UIView, его нужно добавить в VC, чтобы его можно было увидеть. – brandonscript

+0

Мне не нужно его видеть. Мне просто нужно использовать UIWebView для запуска некоторого javascript на странице. Но, похоже, он не загружает страницу, если она не добавлена ​​в представление. – Darren

+0

AH, нет, это не работает. Вы пробовали 'stringByEvaluatingJavaScriptFromString'? – brandonscript

ответ

4

Я нашел решение этой проблемы. UIWebView действительно работает, не будучи добавленным к представлению. По какой-то причине мой NSObject класс, запущенный UIWebView, освобождался ARC. Я только узнал об этом, пытаясь заставить класс добавить UIWebView к просмотру, и он все время рушился, но не дал мне никаких причин или точек останова.

В конечном итоге я решил включить объекты зомби, и он жаловался на отправку сообщения на освобожденный экземпляр.

Во всяком случае, исправление оказалось бы добавить ссылку на strong свойство в моем классе, чтобы остановить это время освобождаться, как это:

@property (strong, nonatomic) MyWebViewHelper *myWebHelper; 
+0

, вы спасли мою жизнь !!! – foolishBoy

Смежные вопросы