UIProgressview не меняется при загрузке файлов

Я создаю приложение, в котором я должен загрузить некоторые файлы с веб-сервера и сохранить их локально. У меня есть следующие JSON:

{
status: 200,
message: "OK",
files: [
"magazines/dentalasia/DentalAsia1/images/toc-thumb-dummy.jpg",
"magazines/dentalasia/DentalAsia1/images/bg-grid-iphone.png",
"magazines/dentalasia/DentalAsia1/images/cover/toc-thumb.jpg",
"magazines/dentalasia/DentalAsia1/images/cover/cover-typo.png",
...
]
}

Что я делаю, так это сохраняю эти строковые значения в NSArray, а затем собираюсь загрузить каждое из них.

-(IBAction)downloadMagazine:(id)sender{
    // 1
    progressView.hidden = NO;

    NSArray *splitArray = [mag.mag_folder componentsSeparatedByString:@"/"];
    NSString *magName = [splitArray lastObject];

    NSString *string = [NSString stringWithFormat:@"%@/webservice/magazine/get-book/apikey/%@/magazine/%@/name/%@",baseUrl,apikey,magazine,magName];
    NSLog(@"STRING IS %@",string);
    NSURL *url = [NSURL URLWithString:string];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    // 2
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    operation.responseSerializer = [AFJSONResponseSerializer serializer];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

        //Create general directory

        NSDictionary *JSON = [responseObject copy];
        NSArray *files = [JSON valueForKey:@"files"];
        reversedFiles = [[files reverseObjectEnumerator] allObjects];

        amountFiles = reversedFiles.count;

        NSArray *splitArray = [mag.mag_folder componentsSeparatedByString:@"/"];
        NSString *magName = [splitArray lastObject];

        NSString *rootString = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:magName];
        NSError *error = nil;
        if (![[NSFileManager defaultManager] fileExistsAtPath:rootString])
            [[NSFileManager defaultManager] createDirectoryAtPath:rootString withIntermediateDirectories:NO attributes:nil error:&error];
        rootString = [rootString stringByAppendingPathComponent:@"/www"];
        if (![[NSFileManager defaultManager] fileExistsAtPath:rootString])
            [[NSFileManager defaultManager] createDirectoryAtPath:rootString withIntermediateDirectories:NO attributes:nil error:&error];


        for(int i = 0 ; i<reversedFiles.count ; i++){
            NSString *file = [reversedFiles objectAtIndex:i];
            NSString *strUrl = [NSString stringWithFormat:@"%@/%@",baseUrl,file];
            NSArray *splitUrl = [file componentsSeparatedByString:@"/"];
            NSString *lastObject = [splitUrl lastObject];
            if ([lastObject rangeOfString:@"."].location == NSNotFound) {
                rootString = nil;
                rootString = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:magName];
                rootString = [rootString stringByAppendingPathComponent:@"/www"];
                for (int i=0; i<splitUrl.count; i++) {
                    if(i>2){
                        NSString *pathComponent = [NSString stringWithFormat:@"/%@",[splitUrl objectAtIndex:i]];
                        rootString = [rootString stringByAppendingPathComponent:pathComponent];
                    }
                }
                if (![[NSFileManager defaultManager] fileExistsAtPath:rootString])
                    [self calculatePie:i];
                [[NSFileManager defaultManager] createDirectoryAtPath:rootString withIntermediateDirectories:NO attributes:nil error:&error];
            }else{
                NSURL *url = [NSURL URLWithString:strUrl];
                NSData *data = [NSData dataWithContentsOfURL:url];
                if(data)
                {
                    rootString = nil;
                    rootString = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:magName];
                    rootString = [rootString stringByAppendingPathComponent:@"/www"];
                    for (int i=0; i<splitUrl.count; i++) {
                        if(i>2){
                            NSString *pathComponent = [NSString stringWithFormat:@"/%@",[splitUrl objectAtIndex:i]];
                            rootString = [rootString stringByAppendingPathComponent:pathComponent];
                        }
                    }
                    [data writeToFile:rootString atomically:YES];
                    [self calculatePie:i];
                }
            }
        }

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        // 4
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error Retrieving magazine"
                                                            message:[error localizedDescription]
                                                           delegate:nil
                                                  cancelButtonTitle:@"Ok"
                                                  otherButtonTitles:nil];
        [alertView show];
    }];
    // 5
    [operation start];
}


-(void)calculatePie:(int)i{
    float progress = (100.0 / amountFiles) * i;
    float progress2 = progress / 100.0;
    NSLog(@"Progress is %f",progress2);
    [progressView setProgress:progress2 animated:YES];

}

А вот так выглядит часть моего LOG:

2014-04-24 08:56:18.507 DentalAsia[47301:60b] Progress is 0.340136
2014-04-24 08:56:18.764 DentalAsia[47301:60b] Progress is 0.343537
2014-04-24 08:56:19.041 DentalAsia[47301:60b] Progress is 0.346939
2014-04-24 08:56:19.210 DentalAsia[47301:60b] Progress is 0.350340
2014-04-24 08:56:19.549 DentalAsia[47301:60b] Progress is 0.353741
2014-04-24 08:56:19.714 DentalAsia[47301:60b] Progress is 0.357143

Но почему-то мой UIProgressview не двигается! Может кто-то помочь мне с этим ?

Спасибо !


person Steaphann    schedule 24.04.2014    source источник
comment
Вы должны выполнить показ прогресса в основном потоке   -  person nmh    schedule 24.04.2014
comment
вам нужно обновить пользовательский интерфейс в основном потоке.   -  person ChintaN -Maddy- Ramani    schedule 24.04.2014
comment
Работает ли блок завершения в основном потоке? Если да, то у вас есть над чем поработать.   -  person user3386109    schedule 24.04.2014
comment
@ user3386109, как мне теперь, если это выполняется в основном потоке?   -  person Steaphann    schedule 24.04.2014
comment
Поместите NSLog в viewDidLoad. Затем сравните идентификатор потока из этого NSLog с идентификатором потока в блоке завершения NSLog. Идентификатор потока в опубликованных вами журналах NSLogs [47301: 60b], но он будет меняться каждый раз при запуске программы.   -  person user3386109    schedule 24.04.2014
comment
Но у меня нет файла viewDidload. Это внутри настраиваемого uitableviewCell   -  person Steaphann    schedule 24.04.2014
comment
Верно, но поместите NSLog в any viewDidLoad. Поскольку viewDidLoad всегда работает в основном потоке, он предоставит вам идентификатор основного потока.   -  person user3386109    schedule 24.04.2014
comment
@ user3386109 это NSLOg внутри моего ViewDidLoad 2014-04-24 09: 18: 43.031 DentalAsia [47702: 60b] ЗАГРУЗИТЬ НИТЬ   -  person Steaphann    schedule 24.04.2014
comment
давайте продолжим обсуждение в чате   -  person Steaphann    schedule 24.04.2014


Ответы (1)


Убедитесь, что вы обновили представление прогресса в основном потоке:

 -(void)calculatePie:(int)i{
    float progress = (100.0 / amountFiles) * i;
    float progress2 = progress / 100.0;
    NSLog(@"Progress is %f",progress2);

    dispatch_async(dispatch_get_main_queue(), ^{
        [progressView setProgress:progress2 animated:YES];
    });
  }
person diederikh    schedule 24.04.2014
comment
Он по-прежнему остается прежним? Прогресс находится внутри настраиваемой ячейки. И приведенный выше код также находится внутри пользовательского класса пользовательской ячейки? Может в этом проблема? - person Steaphann; 24.04.2014
comment
Просто чтобы быть в безопасности; progressView - это не ноль, верно? ;-) - person diederikh; 24.04.2014