2017-08-29 2 views
1

Ich möchte UIWebView in der Konsole verwenden, so definiere ich einen Delegaten:Verwenden UIWebView in Konsole

@interface webViewDelegate : NSObject <UIWebViewDelegate> 

und schreiben Sie das Protokoll:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 
- (void)webViewDidStartLoad:(UIWebView *)webView; 
- (void)webViewDidFinishLoad:(UIWebView *)webView; 
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error; 

und dann loadrequest:

webView = [[UIWebView alloc] init]; 
webView.delegate = WVdelegate; 
NSURL *htmlURL = [NSURL URLWithString:@"http://192.168.0.100"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:htmlURL]; 
[webView loadRequest:request]; 

Das Problem ist, dass dies eine Konsole ist, und ich möchte die Konsole beenden, nachdem der Delegat aufgerufen wurde. Was soll ich tun, um auf den Delegierten nach dem Anruf loadRequest zu warten?

+0

Was genau meinst du mit "in der Konsole"? – duskwuff

+0

Was meinst du mit "Konsole beenden"? Sie möchten das Webview entfernen? –

+0

Entschuldigung, mein Programm ist ein Kommandozeilen-Tool, also nach Aufruf [webView loadRequest: request] ist das Programm vorbei .i will nur das Ergebnis in - (void) webViewDidFinishLoad: (UIWebView *) webView. Also ich denke, ich sollte etwas nach dem Aufruf hinzufügen [webView loadRequest: Anfrage]. – vane

Antwort

0

Sie können HTML-Quelle in der Konsole erhalten:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    // Check here if still webview is loding the content 
    if (webView.isLoading) 
     return; 

    NSString *fullHtml = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].outerHTML"]; 
    NSLog(@"html:%@", fullHtml); 
} 
+0

Ja, ich mache es einfach, aber nach dem Aufruf [webView loadRequest: request] ist das Kommandozeilen-Tool beendet, also wie kann ich darauf warten, dass webViewDidFinishLoad aufgerufen wird? Ich versuche dies: [NSThread sleepForTimeInterval: 5]; aber es ist ungültig. – vane

1

Das Problem ist, dass Sie keine Runloop haben. Wenn der Code zu Ende ist, wird das Befehlszeilentool beendet. Die Dinge bleiben nicht lange genug, damit der asynchrone Code ausgeführt werden kann.

+0

Siehe https://stackoverflow.com/questions/2154600/run-nsrunloop-in-a-cocoa-command-line-program – matt