2012-06-07 4 views
2

В viewDidLoad, я использую NSURLRequest и NSURLConnection:Как получить содержимое HTML веб-сайта

NSURLRequest *site_request = 
    [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"] 
        cachePolicy:NSURLRequestUseProtocolCachePolicy 
       timeoutInterval:10.0]; 

NSURLConnection *site_connection = 
    [[NSURLConnection alloc] initWithRequest:site_request delegate:self]; 

, а затем я использую

-(void)connection:(NSURLConnection *)site_connection didReceiveData:(NSData *)data 
{  
    site_response = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
} 

и у меня есть весь HTML в site_response.

Я хочу создать невидимую UIWebView, который будет «открыть» страницу из NSURLRequest для того, чтобы использовать JavaScript для получения контента, как это:

NSString *myText = [my_webView stringByEvaluatingJavaScriptFromString: 
         @"document.documentElement......"]; 

В моей .h у меня есть:

UIWebView *my_webview; 
@property (nonatomic, retain) UIWebView *my_webview; 

и в моей .m у меня есть:

@synthesize torrents_webview; 

Мои viewDidLoad после NSURLRequest имеет

[my_webview loadRequest:site_request]; 

и я использую

-(void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    //an alertview here 
} 

для того, чтобы убедиться, что она работает. Но ничего не происходит. Он не дает предупреждения.

Что я делаю неправильно?

ответ

0

webViewDidFinishLoad: это метод делегата UIWebView. Вы не устанавливаете делегата в любом месте кода, который вы указали.

@interface YourClass : UIViewController <UIWebViewDelegate> 

... 

- (void)loadView 
{ 
    self.webView.delegate = self; 
} 


... 
- (void)dealloc 
{ 
    self.webView.delegate = nil; 
} 

Также, если вы используете NSURLRequest, вы снова получите страницу. Но нет необходимости использовать NSURLConnection, просто перейдите прямо к загрузке UIWebView с помощью NSURLRequest.

Или если вы должны использовать NSURLConnection, тогда, когда файл скачал, сохраните его на диск и используйте LoadHTMLString для загрузки содержимого.

+0

спасибо за ответ, я добавил делегат дважды, как Вы предложили, но Бесполезный Не работаю, я не добавил - (void) dealloc { self.webView.delegate = nil; } я могу избежать NSURLConnection, но скажите мне что-то, когда я создаю NSURLRequest в viewDidLoad, он сразу получает содержимое страницы? – invader7

+0

Создание NSURLRequest не получит ничего, но вы передаете запрос NSURLConnection, который получит запрос при его запуске (что я предположил, что вы делали, но не показывали следующую строку, иначе почему есть NSURLConnection?) – Gruntcakes

+0

Ok i удалил NSURLConnection, я понял, что от вас тоже не должно быть благодарности. Вероятно, я пропустил часть «получит запрос, когда вы начнете» – invader7

0

ViewController.h

@interface TopTorrents_ViewController : UIViewController <UITableViewDelegate, UITableViewDataSource,UIWebViewDelegate> 
{ 
    UIWebView *torrents_webview; 
} 

@property (nonatomic, retain) UIWebView *torrents_webview; 

ViewController.m

@synthesize torrents_webview; 

- (void)viewDidLoad 
{  
    torrents_webview.delegate = self; 

    NSURLRequest *site_request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.gr/"] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10.0]; 

    [torrents_webview loadRequest:site_request]; 

    [super viewDidLoad]; 
} 

    -(void)webViewDidFinishLoad:(UIWebView *)webView 
    { 
     NSString *myText = [torrents_webview stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('body')[0]"]; 

    UIAlertView *my_alert = [[UIAlertView alloc] initWithTitle:@"mytitle" message:myText delegate:nil cancelButtonTitle:@"my button" otherButtonTitles:nil,nil]; 

    [my_alert show]; 

} 

это мой обновленный код ... спасибо

+0

Где вы создаете UIWebView? – Gruntcakes

+0

Что вы подразумеваете там, где я его создаю? на ViewController.h у меня есть эти две строки, а в ViewController.m я пытаюсь «рассказать», какой сайт посетить. Я не хочу «просматривать» веб-просмотр, я хочу, чтобы он загружал сайт и скрывался. – invader7

+0

Объекты Objective-C должны быть созданы где-то, как-то прежде, чем их можно будет использовать с помощью alloc или с помощью Interface Builder. Поскольку у вашего torrents_webview нет IBOutlet, я полагаю, вы не используете Interface Builder? Итак, мой вопрос: где ваш вызов для выделения для создания torrents_webview? Позвольте мне задать альтернативный вопрос, в viewDidLoad, каково значение torrents_webview, если вы просмотрите его в отладчике или NSLog it. Другими словами, это ноль или нет? – Gruntcakes