iOS requestStateForRegion returning .unknown after didStartMonitoringFor

iOS requestStateForRegion returning .unknown after didStartMonitoringFor

Confused about why my AppDelegate CLLocationManager sometimes can't successfully determine CLRegionState (CLRegionState.unknown), even though I am making sure to not call requestStateForRegion until after didStartMonitoringForRegion. Seems like some sort of race condition that I don't understand how I'm not handling.

Confused about why my AppDelegate CLLocationManager sometimes can't successfully determine CLRegionState (CLRegionState.unknown), even though I am making sure to not call requestStateForRegion until after didStartMonitoringForRegion. Seems like some sort of race condition that I don't understand how I'm not handling.

Related, what am I supposed to do when I get CLRegionState.unknown? Keep requesting state until I get something? (that seems bad)

AppDelegate:

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{   
    self.locationManager = [[CLLocationManager alloc] init];
    [self.locationManager setDelegate:self];

return [super application:application didFinishLaunchingWithOptions:launchOptions];

}

  • (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(nonnull CLRegion *)region { NSLog(@"%@", [NSString stringWithFormat:@"didStartMonitoringFor region with ID: %@", region.identifier]); // delay per https://stackoverflow.com/a/33288103/3380970 double delayInSeconds = 2.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); dispatch_after(popTime, dispatch_get_main_queue(), ^(void) {

      [self.locationManager requestStateForRegion:region];

    }); }

  • (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(nonnull CLRegion *)region { NSLog(@"%@", [NSString stringWithFormat:@"didDetermineState from AppDelegate CLLocationManager: %@ (%ld)", region.identifier, (long)state ]); NSString *baseUrl = [self fetchBaseUrl]; switch (state) {

      case CLRegionStateInside:
          NSLog(@"%@", @"Determined .inside state for geofence");
          [HelperFunctions postGeofenceTransitionWithBaseUrl:baseUrl region:region transitionType:1];
          break;
      default:
          break;

    } }

Abdriged logs:

Adding geofence with ID: 5:90fd74e0-cbc7-dbe5-20fc-b870203055e1
Adding geofence with ID: 8:d408f466-ea1b-6cbb-382f-f7567db61157 Adding geofence with ID: 7:ba97dda2-39a7-9b95-8ea9-ea183d69a858

didStartMonitoringFor region with ID: 5:90fd74e0-cbc7-dbe5-20fc-b870203055e1 didStartMonitoringFor region with ID: 8:d408f466-ea1b-6cbb-382f-f7567db61157 didStartMonitoringFor region with ID: 7:ba97dda2-39a7-9b95-8ea9-ea183d69a858

didDetermineState from AppDelegate CLLocationManager: 5:90fd74e0-cbc7-dbe5-20fc-b870203055e1 (0) didDetermineState from AppDelegate CLLocationManager: 8:d408f466-ea1b-6cbb-382f-f7567db61157 (0) didDetermineState from AppDelegate CLLocationManager: 7:ba97dda2-39a7-9b95-8ea9-ea183d69a858 (0)

Thanks

Angular 9 Tutorial: Learn to Build a CRUD Angular App Quickly

What's new in Bootstrap 5 and when Bootstrap 5 release date?

Brave, Chrome, Firefox, Opera or Edge: Which is Better and Faster?

How to Build Progressive Web Apps (PWA) using Angular 9

What is new features in Javascript ES2020 ECMAScript 2020

How to use Objective C Cocoapods in Swift Framework

My swift framework has dependency of Objective C Framework. How do I use that ?

C/C++ vs. Rust: A developer’s perspective

In this post, you'll see the difference between Rust and C/C++ in a developer’s perspective