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

にも問題があります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"elseすべてをfor ループの外側に移動し、見つかったものが true でない場合にのみ移動する必要があります。

于 2012-07-28T21:48:19.450 に答える
1

ボタンが初めてクリックされたときのように見えますwebpageURLLabel.textが、有効な URL がない可能性があるため、リクエストは無効です。が[self checkURL]呼び出されるとwebpageURLLabel.text、有効な URL が設定されるため、次のクリックが機能します。

?-checkURLを作成する前に呼び出す必要があるかもしれません。NSURLRequest

于 2012-07-28T21:35:54.213 に答える