Pregunta

I want to implement a UIAlertView which will show when [[AFHTTPRequestOperationManager manager] GET:] will start doing its job and will disappear automatically when the job is done. One cool extra feature would be if I could display UIProgressView with progress of AFHTTPRequestOperation.

For now I'm checking if a have anything in Core Data and based on that I initialize 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];
    }

So to prevent from showing this alert when UITableView is already filled with data. As you can see I'm calling this [self collectData] method which looks like:

-(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
    }];
}

As you can see I'm programatically showing this UIAlertView and dismissing it when downloading is completed and UITableView is reloaded. But I have no clue how to add UIProgressView or how to dismiss this UIAlertView without using dismissWithClickedButtonIndex:. Any ideas?

¿Fue útil?

Solución

AFNetworking 2.0 HTTP POST Progress

You can receive progress information if you will use the following method

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

of AFHTTPSessionManager class

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top