1
- (IBAction)saveButton:(id)sender
{
    NSURL *yourURL = [NSURL URLWithString: webpageURLLabel.text ];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:yourURL];
    if ([self checkURL] == YES) {
        [webpagePreview loadRequest:request];
        webpagePreview.scalesPageToFit = YES;
    }
}

- (BOOL)checkURL
{
    NSString *arrayOfStrings = [NSArray arrayWithObjects:@"http://", @"https://", nil];
    NSString *stringToSearchWithin = webpageURLLabel.text;

    BOOL found=NO;
    for (NSString *s in arrayOfStrings)
    {
        if ([stringToSearchWithin rangeOfString:s].location != NSNotFound)
        {
            found = YES;
            break;
        } else
        {
            webpageURLLabel.text = [NSString stringWithFormat:@"http://%@", webpageURLLabel.text];
            found = YES;
            break;
        }
    }
    return found;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    webpageTitleLabel.text = [webpagePreview stringByEvaluatingJavaScriptFromString:@"document.title"];
}

我调试了它,看起来它应该加载。但是由于某种原因,当您第一次点击按钮时,什么也没有发生。

如果用户再次点击该按钮,它就可以正常工作。有什么建议么?

4

2 回答 2

1

在我看来,第一次单击按钮时webpageURLLabel.text可能没有有效的 URL,因此请求无效。然后当[self checkURL]被调用时,webpageURLLabel.text被设置为一个有效的 URL,所以下一次点击有效。

也许您应该-checkURL在创建NSURLRequest?

于 2012-07-28T21:35:54.213 回答
1

中也存在问题checkURL。请注意,它总是返回 YES。for 循环内部的逻辑简化为:

if (some condition) {
    found = YES;
    break;
} else {
    // Fix webpageURLLabel.text
    found = YES;
    break;
}

但是,请考虑如果您有一个以 . 开头的有效条目会发生什么@"https://"。第一次通过循环时,if 条件失败,因此@"http://"被添加到 URL 的前面并返回。于是@"https://valid.com"变成@"http://https://valid.com". 您需要将所有内容都移到elsefor 循环之外,并且只有在 found 不正确时才这样做。

于 2012-07-28T21:48:19.450 回答