Загрузка AFNetworking с прогрессивным UIAlertView

Я хочу реализовать UIAlertView, который будет показывать, когда [[AFHTTPRequestOperationManager manager] GET:] начнет выполнять свою работу, и автоматически исчезнет, ​​когда работа будет выполнена. Одна интересная дополнительная функция была бы, если бы я мог отображать UIProgressView с прогрессом AFHTTPRequestOperation.

Сейчас я проверяю, есть ли что-нибудь в Core Data, и на основе этого я инициализирую UIAlertView:

if (![self coreDataHasEntriesForEntityName:@"Group"]) {
        downloadingAlert = [[UIAlertView alloc] initWithTitle:@"Pobieranie" message:@"Trwa pobieranie grup" delegate:nil cancelButtonTitle:@"Anuluj" otherButtonTitles:nil, nil];
        [self collectData];
    } else {
        NSError *error;
        [[self fetchedResultsController] performFetch:&error];
    }

Таким образом, чтобы предотвратить отображение этого предупреждения, когда UITableView уже заполнен данными. Как видите, я вызываю этот метод [self collectData], который выглядит так:

-(void)collectData
{
    [downloadingAlert show];

    [[AFHTTPRequestOperationManager manager] GET:ALL_GROUPS parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSManagedObjectContext *tempContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
        tempContext.parentContext = self.moc;

        [tempContext performBlock:^{

            // Doing something with responseObject

            if (![tempContext save:&error]) {
                NSLog(@"Couldn't save: %@", [error localizedDescription]);
            }

            [self.moc performBlock:^{
                NSError *error;
                if (![self.moc save:&error]) {
                    NSLog(@"Couldn't save: %@", [error localizedDescription]);
                }

                [downloadingAlert dismissWithClickedButtonIndex:0 animated:YES];

                [self.writer performBlockAndWait:^{
                    NSError *error;
                    if (![self.writer save:&error]) {
                        NSLog(@"Couldn't save: %@", [error localizedDescription]);
                    }
                }];

            }];
        }];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        // Show alert with info about failure
    }];
}

Как видите, я программно показываю этот UIAlertView и закрываю его, когда загрузка завершена и UITableView перезагружается. Но я понятия не имею, как добавить UIProgressView или как убрать это UIAlertView, не используя dismissWithClickedButtonIndex:. Есть идеи?


person cojoj    schedule 02.03.2014    source источник


Ответы (1)


Прогресс HTTP POST AFNetworking 2.0

Вы можете получать информацию о прогрессе, если будете использовать следующий метод

- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request
                                         fromData:(NSData *)bodyData
                                         progress:(NSProgress * __autoreleasing *)progress
                                completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler

класса AFHTTPSessionManager

person Avt    schedule 02.03.2014
comment
Для моей цели этот метод был бы лучшим выбором: downloadTaskWithRequest:fromData:progress:completionHandler: :) - person cojoj; 03.03.2014