When you call stopRangingBeaconsInRegion, where are you getting the list of regions? The proper way to do this is like below:
for (CLRegion *monitored in [self.locationManager monitoredRegions]) {
NSLog(@"Stopping monitoring on: %@", monitored.identifier);
[self.monitoringLocationManager stopMonitoringForRegion:monitored];
}
for (CLBeaconRegion *region in [self.locationManager rangedRegions]) {
NSLog(@"Stopping ranging on: %@ ", region.identifier);
[self.rangingLocationManager stopRangingBeaconsInRegion:region];
}