Following provides some utility methods to create UIAlertViewControllers with completion block.

+ (void)showAlertWithTitle:(NSString *)title message:(NSString *)message presentingViewController:(UIViewController *)presentingViewController {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(@"OK", @"OK action") style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        [alertController dismissViewControllerAnimated:YES completion:^{
            
        }];
    }];
    [alertController addAction:okAction];
    [presentingViewController presentViewController:alertController animated:YES completion:^{
        
    }];
}

+ (void)showAlertWithTitle:(NSString *)title message:(NSString *)message presentingViewController:(UIViewController *)presentingViewController cancelString:(NSString *)cancelString okString:(NSString *)okString completion:(void (^) (BOOL okClicked))completion {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
    if (!okString) {
        okString = @"OK";
    }
    
    UIAlertAction *okAction = [UIAlertAction actionWithTitle:NSLocalizedString(okString, @"OK action") style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        [alertController dismissViewControllerAnimated:YES completion:^{
            completion(YES);
        }];
    }];
    if (cancelString) {
        UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:NSLocalizedString(cancelString, @"Cancel action") style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
            [alertController dismissViewControllerAnimated:YES completion:^{
                completion(NO);
            }];
        }];
        [alertController addAction:cancelAction];

    }
    [alertController addAction:okAction];
    [presentingViewController presentViewController:alertController animated:YES completion:^{
        
    }];

}

+ (void)showAlertWithTitle:(NSString *)title message:(NSString *)message presentingViewController:(UIViewController *)presentingViewController cancelString:(NSString *)cancelString option1:(NSString *)option1 completion1:(void (^) ())completion1 option2:(NSString *)option2 completion2:(void (^) ())completion2 {
    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        [alertController dismissViewControllerAnimated:YES completion:^{
        }];
    }];
    [alertController addAction:cancelAction];
    
    if (option1) {
        UIAlertAction *action1 = [UIAlertAction actionWithTitle:option1 style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
            [alertController dismissViewControllerAnimated:YES completion:^{
            }];
            completion1();
        }];
        [alertController addAction:action1];
    }
    
    if (option2) {
        UIAlertAction *action2 = [UIAlertAction actionWithTitle:option2 style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
            [alertController dismissViewControllerAnimated:YES completion:^{
            }];
            completion2();
        }];
        [alertController addAction:action2];
    }
    [presentingViewController presentViewController:alertController animated:YES completion:^{
        
    }];

}