Posts

Post not yet marked as solved
3 Replies
981 Views
Hi,I am using disptach_group to check all the preconditions before executing the final request.Here I am checking the location permissions whether the user has granted one of the permissions (WhenInUse, Always )@implementation ConditionEvaluator + (void)evaluateConditionsWithcompletionHandler:(void (^) (NSError *_Nullable))completion { dispatch_group_t conditionGroup = dispatch_group_create(); dispatch_group_enter(conditionGroup); LocationCondition *loctionCondition = [[LocationCondition alloc] init; [[loctionCondition requestPermissionWithHandler:^(CLAuthorizationStatus status) { dispatch_group_leave(conditionGroup); }]; // Condition 2 dispatch_group_enter(conditionGroup); // async call [condition2 checkWithCompletion:^(){ dispatch_group_leave(conditionGroup); }]; // more here // dispatch_group_notify(conditionGroup, dispatch_get_global_queue(0, 0), ^{ completion(failures); }); } @endThe problem is the requestPermissionWithHandler's block never executes and thread freeze as dispatch_group_leave never gets called.I tried to debug LocationCondition implementation there I found that requestAlwaysAuthorization never gets called and so, no delegate callbacks of locationManager.@implementation LocationCondition - (void)requestPermissionWithHandler:(PermissionHandler)handler { _permissionHandler = [handler copy]; dispatch_async(dispatch_get_main_queue(), ^{ [self.locManager requestAlwaysAuthorization]; }); } #pragma mark - CLLocationManagerDelegate - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { if (self.permissionHandler) { self.permissionHandler(status); } } - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { if (self.permissionHandler) { self.permissionHandler(CLLocationManager.authorizationStatus); } } @endI also tried the following but the block on the main queue never executes.dispatch_group_t conditionGroup = dispatch_group_create(); dispatch_group_enter(conditionGroup); dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"Inside main queue"); dispatch_group_leave(conditionGroup); });dispatch_group_notify(conditionGroup, dispatch_get_global_queue(0, 0), ^{ completion(failures); });I don't know what I am doing wrong here.Any suggestions or help are welcome.
Posted
by rtyagi.
Last updated
.