Загрузите задний план с помощью цикла do while

Я работаю над приложением, где я проверяю URL, используя следующий код.

-(недействительными) существует
{
    NSString *strImg = @"некоторый URL";


    NSURL *aImgUrl = [NSURL URLWithString:strImg];

    NSMutableURLRequest *imgRequest = [NSMutableURLRequest requestWithURL:strImg];
    [imgRequest setHTTPMethod:@"HEAD"];

    imgConnection = [NSURLConnection connectionWithRequest: делегат imgRequest:self];
}

Это то, что я делаю, когда получаю ответ.

-(недействительное) соединение:(NSURLConnection *) соединение didReceiveResponse:(NSURLResponse *) ответ
{

    if ([(NSHTTPURLResponse *) ответ statusCode] == 200)
    {
        // URL существует
        appDel.isExists = TRUE;
        temp = FALSE;
        [self loadData];
        NSLog(@"%ld",(long)[(NSHTTPURLResponse *) ответ statusCode]);
    }
    иначе if ([(NSHTTPURLResponse *) ответ statusCode] == 404)
    {
        // URL не существует
        appDel.isExists = FALSE;
        temp = TRUE;
        [self loadData];
        NSLog(@"%ld",(long)[(NSHTTPURLResponse *) ответ statusCode]);
    }
}

Это мой код данных загрузки

-(недействительными) LoadData
{


    результат = ЛОЖЬ;

    isReqSent = FALSE;

    делать
    {
        if (appDel.isExists == TRUE)
        { 
            NSURL *aTxtUrl = [NSURL URLWithString:apiText];
            NSURL *aImgUrl = [NSURL URLWithString:apiImage];

            NSURLRequest *imgRequest = [NSURLRequest requestWithURL:aImgUrl];
            NSURLRequest *txtRequest = [NSURLRequest requestWithURL:aTxtUrl];

           [NSURLConnection sendAsynchronousRequest: очередь txtRequest:[NSOperationQueue mainQueue] завершение Handler:^(ответ NSURLResponse *, данные NSData *, NSError *connectionError)
             {
                 если (данные)
                 {
                         NSString *strTxt = [[NSString alloc]initWithData: кодировка данных:NSUTF8StringEncoding];
                         [lblTime setText:strTxt];
                          [policyImgWebView loadRequest:imgRequest];

                         результат = ИСТИНА;                     
                 }

             }];

        }

        если (результат)
        {
            appDel.isExists = TRUE;
        }
        еще
        {
            если (!isReqSent)
            {
                NSString *soapMessage = @"мое мыльное сообщение";

                NSString *soapAction = @"мой мыльный URL";


                [objWebServiceParser xmlParsing:soapMessage:soapAction:Number];
                isReqSent = TRUE;
            }

            }
        если (темп)
        {
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
                [self backgroundProcess];
            });
        }

    } while (result == FALSE);

Это мой фоновый процесс

-(недействительными)backgroundProcess
{

    NSString *strImg = @"некоторый URL";

    NSURL *aImgUrl = [NSURL URLWithString:apiImage];

    NSMutableURLRequest *imgRequest = [NSMutableURLRequest requestWithURL:aImgUrl];
    [imgRequest setHTTPMethod:@"HEAD"];

    imgConnection = [NSURLConnection connectionWithRequest: делегат imgRequest: self];

}

я не знаю, где я делаю что-то не так, может ли кто-нибудь направить меня?

я хочу, чтобы фоновый процесс продолжался до тех пор, пока он не получит данные, когда полученные данные appdel.isExists сбудутся и попадут в основной поток для обновления пользовательского интерфейса.

Я попробовал GCD & performSelectorInTheBackground но я не правильно понимаю, и я понимаю NSThread ошибка ошибки 35.


Он работал с NSURLSessionDownloadTask, но все еще ищет лучший вариант.

2 ответа

Решение

Чтобы загрузить изображение в ваш UIImageView с сервера, вы можете использовать ниже рамки.

SDWebImage

Ты получаешь completionBlock, progressBlock и многие другие свойства, которые вы можете использовать для обновления вашего интерфейса. Он будет уведомлять вас в блоках, а затем вы можете обновить все, что вы хотите на пользовательском интерфейсе.

Образец:

Это так же просто, как этот код, просто загрузить изображение, если imageURL действителен (это ваш случай)

UIImageView *imageView;
[imageView setImageWithURL:[NSURL URLWithString:YOUR_URL]];

И у этого также есть богатые методы как ниже

UIImageView *imageView;
[imageView setImageWithURL:[NSURL URLWithString:YOUR_URL] 
           placeholderImage:[UIImage imageNamed:@"placeholder.png"]
           completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) 
           {
               // in "image" you'll get the downloaded image from the URL
               ... completion code here ...

           }];

Не звони NSURLConnection в фоновом режиме. Как NSURLConnection будет работать автоматически. Поскольку вы не отправляете асинхронный запрос, он будет работать в фоновом режиме и не будет зависать от вашего основного потока. В ваших данных загрузки удалить отправку. У тебя есть:

if (temp)
    {
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
            [self backgroundProcess];
        });
    }

сделай это:

if (temp)
    {
        [self backgroundProcess];
    }

Вам не нужно использовать диспетчеризацию.

Другие вопросы по тегам