将HTML NSString加载到UIWebView中

问题描述 投票:0回答:2

我正在做一个项目,我使用NSURLConnection连接到网页,以便能够监视返回的状态代码(200 OK / 404错误)。如果我将状态代码接收为404,并将状态代码接收为200,我希望将用户发送到顶部URL www.domain.com,我希望将该页面加载到Webview中。我通过创建一个新请求已经看到了这个问题的几种实现,但是我觉得这是没有必要的,因为您已经在第一个请求中收到了html,所以我只想将该HTML加载到webView中。

所以我尝试使用[webView loadHTMLFromString:baseURL:],但它并不总是有效,我注意到当我在connectionDidFinnishLoading中用html打印带有html的NSString时,它有时为null,并且当我通过打印来监视这些情况时, didReceiveData中的html中最后一个数据包的随机数为NULL(介于2到10之间)。总是相同的网页不会被加载。如果我使用[webView loadRequest:myRequest]将它们加载到我的webView中,它将始终有效。我的实现看起来像这样,也许你们中的某人可以看到我在做错什么。

我通过单击按钮创建了我的第一个请求。

-(IBAction)buttonClick:(id)sender
{
    NSURL *url = [NSURL URLWithString:@"http://www.domain.com/page2/apa.html"];
    NSURLRequest *theRequest = [NSURLRequest requestWithURL:url]
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

    if( theConnection )
    {
        webData = [[NSMutableData data] retain];
    }
    else
    {

    }
}

然后,我通过将请求强制转换为NSHTTPURLResponse来访问状态代码,然后根据状态代码设置Bool,来监视didReceiveResponse方法中的响应代码。

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{     
    NSHTTPURLResponse *ne = (NSHTTPURLResponse *)response;
    if ([ne statusCode] == 200) {
        ok = TRUE;
    }

    [webData setLength: 0];
}

然后我检查connectionDidFinnishLoading中的布尔值。如果我登录html NSString,则会得到网页的来源,因此我知道它不是一个空字符串。

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{

    NSString *html = [[NSString alloc] initWithBytes: [webData mutableBytes] length:[webData length] encoding:NSUTF8StringEncoding];

    NSURL *url = [NSURL URLWithString:@"http://www.domain.com/"];
    if (ok) {
        [webView loadHTMLString:html baseURL:url];
        ok = FALSE;
    }
    else {
        // Create a new request to www.domain.com
    }

}

webData是一个实例变量,我像这样将其加载到didReceiveData中。

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [webData appendData:data];
}

我正在做一个项目,我使用NSURLConnection连接到网页,以便能够监视返回的状态代码(200 OK / 404错误)。我想将用户发送到顶部URL ...

iphone uiwebview nsurlconnection nsurlrequest
2个回答
0
投票

我假设webData是您的类的实例变量。我认为您的问题是您没有将webData设置为从NSURLConnection获取的数据。尝试这样的事情:


0
投票

您正在混合执行连接的两种方法-同步和异步。如果异步在同步之前完成,则将webData重新初始化为空字符串。因此,即使同步填充的webData也将被清除。

© www.soinside.com 2019 - 2024. All rights reserved.