2012-02-28 37 views
9

Trong trình duyệt web của tôi, tôi đang cố gắng tải UIWebView với NSData được lấy từ một số NSURLConnection. Khi tôi cố gắng tải nó vào UIWebView, thay vì trang web, nó đi kèm với văn bản thuần HTML.Đang tải NSData vào UIWebView

Đây là mã của tôi:

trong viewDidLoad:

NSURLRequest *request = [NSURLRequest requestWithURL: [NSURL URLWithString:@"http://www.msn.com"]]; 
[NSURLConnection connectionWithRequest: request delegate:self]; 

sau trong mã:

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
    { 
    webdata = [NSMutableData dataWithData: data]; 
    } 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection 
    { 
    [webview loadData:webdata MIMEType: @"text/html" textEncodingName: @"UTF-8" baseURL:nil]; 
    } 

UIWebView loading plain HTML instead of loading the page

+0

Xem https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html – titaniumdecoy

Trả lời

14

Bạn không thêm dữ liệu mà bạn đang nhận. Sử dụng đoạn mã này

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 
    if (webdata == nil) { 
     webdata = [[NSMutableData alloc] init]; 
    } 
    [webdata appendData:data]; 
} 

Phương pháp này có thể được gọi một lần hoặc nhiều lần tùy thuộc vào độ dài dữ liệu của bạn. Vì vậy, thay vì chỉ định dữ liệu mới cho ivar của bạn, hãy thêm dữ liệu của bạn vào nó để bạn có phản hồi đầy đủ không phải gói dữ liệu cuối cùng đã nhận được.
------------------------------------------------ -------------------------------------------------- ----------------------------------
Đã cập nhật
Hoặc sử dụng như thế này.

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ 
     webdata = [[NSMutableData alloc] init]; 
} 
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ 
    [webdata appendData:data]; 
} 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
    [mWebView loadData:webdata MIMEType: @"text/html" textEncodingName: @"UTF-8" baseURL:nil]; 
} 
+1

Phương pháp trên hoạt động rất tốt, cảm ơn. Chỉ cần một điều: nó đang tải các phiên bản máy tính để bàn của các trang web khi tôi sử dụng phương pháp này như trái ngược với sử dụng UIWebview loadRequest: NSURLRequest. Có cách nào dễ dàng để tải phiên bản trang web di động theo mặc định không? (Tôi là người mới đối với loại nội dung này) – Greg

+0

tôi cũng vậy: D .. Đặt câu hỏi này làm câu hỏi mới. Đến lúc đó tôi sẽ tìm câu trả lời .. và đăng ở đây liên kết câu hỏi mới của bạn để nếu câu trả lời đến tôi cũng cho tôi biết cách làm điều đó –

+0

Đồng thời tìm cách tải phiên bản di động và sử dụng trình tải tùy chỉnh để tải các liên kết được nhấp vào bên trong UIWebView –