简体   繁体   中英

SVProgressHUD dismiss not working in custom class

Firstly, I've added some functions which need to call from different ViewControllers in one class file. For those function, I've add SVProgressHUD as preprocess and dismiss after all process is finished. SVProgressHUD is displaying correctly before process is started. But after process, SVProgressHUD is never dismissed at all. Please let me know how to solve that issue.

I've added [SVProgressHUD dismiss]; in all process is finished. But never dismissed.

common.m

- (NSDictionary *) loadBlahClass:(NSString *)paramUserId {
    [SVProgressHUD showWithStatus:@"Loading Cards..."];
    __block NSDictionary *jsonResponse;
    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.completionQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"application/json"];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    NSString *urlStr = [NSString stringWithFormat:@"MY_URL"];

    [manager GET:urlStr parameters:nil
         success:^(AFHTTPRequestOperation *operation, id responseObject)
     {
         NSString *jsonString = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
         NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
         jsonResponse = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
         [SVProgressHUD dismiss];
         dispatch_semaphore_signal(semaphore);
     }

         failure:
     ^(AFHTTPRequestOperation *operation, NSError *error) {
         [SVProgressHUD dismiss];
         [self showAlert:APP_NAME alertMessage:[error localizedDescription]];
         dispatch_semaphore_signal(semaphore);
     }];
    [SVProgressHUD dismiss];
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    return jsonResponse;
}

testViewController.m

_allTableData = [[NSMutableArray alloc]init];
NSDictionary *jsonResponse = [commClass loadBlahClass:strUserId];
NSNumber *status = [jsonResponse valueForKey:@"Success"];
NSString *message = [jsonResponse valueForKey:@"Message"];
NSArray *dataArray = [jsonResponse valueForKey:@"lstCC"];

if([status intValue] == 1) {
    for(int i=0; i<[dataArray count]; i++) {
        //working .......
    }

    [_ccTable reloadData];
    [SVProgressHUD dismiss];
} else {
    [commClass showAlert:APP_NAME alertMessage:message];
    [SVProgressHUD dismiss];
}

I've found answer. Something like that.

[SVProgressHUD show];
__block BOOL result;
dispatch_async(queue, ^{
    result = [self autanticate];
    NSLog(@"autantication result = %d", result);
    result = [self getCSRFToken];
    NSLog(@"Login success result = %d", result);
    dispatch_async(dispatch_get_main_queue(), ^{
        [SVProgressHUD dismiss];
    })
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM