ошибка при проверке, является ли логическое значение да или нет в ios uiwebview target-c - PullRequest
0 голосов
/ 16 ноября 2018

Пытаюсь проверить, загружается ли URL в IOS. UIWebView имеет ошибку или нет, я использую приведенный ниже код, чтобы получить код статуса запроса URL, если 200 я хочу установить isRequestWebOk на YES, иначе я будет использовать значение по умолчанию NO, кажется, что все работает хорошо, за исключением того, что isRequestWebOk по-прежнему возвращает NO, даже если код состояния равен 200, и я устанавливаю его if(200){isRequestWebOk = YES;}. Пожалуйста, кто-нибудь может мне помочь, я не знаю, почему не работает должным образом.

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType{
    static BOOL isRequestWeb = YES;
    static BOOL isRequestWebOk = NO;
    NSString *embedHTML = @"<html><head></head><body style='color:#000;'><p>Error</p></body></html>";

    if (isRequestWeb) {
        //NSHTTPURLResponse *response = nil;
        //NSData *data = [NSURLConnection sendSynchronousRequest:inRequest returningResponse:&response error:nil];
        //if (response.statusCode == 404) {}

        [[[NSURLSession sharedSession] dataTaskWithRequest:inRequest completionHandler:^(NSData * data, NSURLResponse * response, NSError * error) {
            NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
            NSInteger statusCode = httpResponse.statusCode;
            if (statusCode >= 200 && statusCode < 300){
                /*I think this do set but i can't access it outside the completionHandler but i really need to check it outside as i cannot do many other things inside here*/
                isRequestWebOk = YES;
                NSLog(@"GOOD");
            }else if (statusCode == 404) {
                NSLog(@"code for 404");
            }else if (statusCode == 403) {
                NSLog(@"code for 403");
            }else if (statusCode == 500) {
                NSLog(@"code for 500");
            }else{
                NSLog(@"code for ALL");
                isRequestWebOk = YES;
            }
            NSLog(@"code is what: %ld", (long)statusCode);
        }] resume];
        isRequestWeb = NO;

        /*This is where am checking for isRequestWebOk if true or not but it always return false*/
        if(isRequestWebOk){
            NSLog(@"Request is okay 200");
            return YES;
        }else{
            NSLog(@"Bad Request b4004");
            inWeb.userInteractionEnabled = NO;
            inWeb.opaque = NO;
            inWeb.backgroundColor = [UIColor clearColor];
            [inWeb loadHTMLString: embedHTML baseURL: nil];
            return NO;
        }
    }
    return YES;
}

Я думаю, что это действительно так, но я не могу получить к нему доступ вне завершения, но мне действительно нужно проверить его снаружи, так как внутри я не могу делать много других вещей

1 Ответ

0 голосов
/ 16 ноября 2018

Вам нужно переместить этот блок кода:

if(isRequestWebOk){
    NSLog(@"Request is okay 200");
    return YES;
}else{
    NSLog(@"Bad Request b4004");
    inWeb.userInteractionEnabled = NO;
    inWeb.opaque = NO;
    inWeb.backgroundColor = [UIColor clearColor];
    [inWeb loadHTMLString: embedHTML baseURL: nil];
    return NO;
}

В completionHandler.

В то время, когда вы здесь проверяете, является ли isRequestWebOk YES илиNO запрос все еще может быть в процессе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...