2012-06-07 8 views
2

의 HTML 콘텐츠를 얻을 방법 :, 내가 <code>NSURLRequest</code> 및 <code>NSURLConnection</code>을 사용하고 웹 사이트 <code>viewDidLoad</code>에서

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]; 
} 

사용하고 난이 site_response에서 전체 HTML이있다. 내가 가진 내 .H에서

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

:

는이 같은 콘텐츠를 자바 스크립트를 사용하기 위해 NSURLRequest에서 페이지를 "열기"합니다 보이지 않는 UIWebView를 만들

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

내하는 .m에서 내가 가진 :

@synthesize torrents_webview; 

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을 사용할 필요가 없습니다. 바로 NSURLRequest를 사용하여 UIWebVIew를로드하는 것입니다.

또는 NSURLConnection을 사용해야하는 경우 파일을 다운로드 한 후 디스크에 저장하고 LoadHTMLString을 사용하여 내용을로드하십시오.

+0

덕분에, 내가 두 번 대리자를 추가입니다 '일하지 않으면 추가하지 않았다. - (void) dealloc { self.webView.delegate = nil; } NSURLConnection을 피할 수 있지만 viewDidLoad에서 NSURLRequest를 만들면 즉시 페이지의 내용을 가져옵니다. – 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]; 

} 

이 당신이 제안하지만 didn를 같이 내 업데이트 된 코드 ... 감사 답변에 대한

+0

UIWebView는 어디에서 생성합니까? – Gruntcakes

+0

메신저를 만드는 곳이 무엇을 의미합니까? ViewController.h에서 나는이 두 줄을 가지고 있고 ViewController.m에서 어떤 사이트를 방문할지 "알려"려고합니다. 나는 "보기"webview 싶어, 내가 사이트를로드하고 숨길 수 싶습니다. – invader7

+0

Objective-C의 객체는 어딘가에 작성되어야하며, alloc 또는 Interface Builder를 사용하여 객체를 사용할 수 있습니다. 귀하의 torrents_webview에는 IBOutlet이 없으므로 Interface Builder를 사용하지 않는다고 가정합니까? 그래서 내 질문에 어디에 당신의 호출에 대한 토런트 웹 뷰를 만들려면 무엇입니까? viewDidLoad에서 디버거 또는 NSLog에서 볼 때 torrents_webview의 값이 무엇인지 다른 질문을하겠습니다. 다른 말로하면 그것은 없거나 그렇지 않은 것입니까? – Gruntcakes

관련 문제