Проблемы мониторинга региона в IOS

Я разрабатываю мониторинг региона с 4-5 месяцев, и раньше он работал нормально. Неделю назад, когда мы тестировали код на устройстве с IOS 7.1, мы обнаружили проблему:

  • когда обнаружен один зарегистрированный регион, он никогда не будет обнаружен снова, пока пользователь не удалится от этого региона на расстояние 10 км, если пользователь никогда не пересечет этот диапазон в 10 км, для этого региона не будут вызываться события входа/выхода. Если пользователь перемещается на расстояние 10 км от обнаруженного региона, будет вызвано его событие Exit, а когда пользователь вернется рядом с зарегистрированным регионом, только тогда будет запущено событие Enter.

Вот мой код: - я сделал одноэлементный диспетчер местоположений и инициализировал его в диспетчере местоположений:

    if (locationManager == nil)
    {
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        locationManager.distanceFilter = kCLDistanceFilterNone;
        locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
        if ([locationManager respondsToSelector:@selector(activityType)])
        {
            [locationManager setActivityType:CLActivityTypeFitness];
        }

        if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
        {
            [locationManager requestAlwaysAuthorization];
        }
    }
  • Затем я получаю текущее местоположение пользователя и отправляю его на сервер, чтобы получить близлежащие регионы геозоны, и регистрирую их для мониторинга следующим образом:

    - (void)startRegionMonitoring:(NSArray*)regions
    {
        [self unregisterRegionMonitoring];
    
        if ([Helper isValidForRegionMonitoring])
        {
            [locationManager setDelegate:self];
            int MAX_REGION = regions.count > 20 ? 20 : regions.count;
    
            for (int index=0; index<MAX_REGION; index++)
            {
                NSString *identifier = [NSString stringWithFormat:@"Identfier %d", index+1];
                CLLocationCoordinate2D centerCoordinate = CLLocationCoordinate2DMake([[[regions objectAtIndex:index] valueForKey:@"lat"] doubleValue],
                                                                             [[[regions objectAtIndex:index] valueForKey:@"lon"] doubleValue]);
    
                CLRegion *region = nil;
                double radius = 200.0;
    
                if ([Helper isIOS7])
                {
                    region = [[[CLCircularRegion alloc] initWithCenter:centerCoordinate
                                                        radius:radius
                                                    identifier:identifier] autorelease];
                }
                else
                {
                    region = [[[CLRegion alloc] initCircularRegionWithCenter:centerCoordinate
                                                              radius:radius
                                                          identifier:identifier] autorelease];
                }
                    [locationManager startMonitoringForRegion:region];
            }
        }
    }
    

Я пробовал разные значения «distanceFilter», «DesiredAccuracy», а также играл с разными значениями радиуса контролируемых областей, чтобы исправить ошибку. но это не сработало.


person nidIOS    schedule 15.09.2014    source источник
comment
Пожалуйста, удалите вопрос, так как он дублируется.   -  person Lord Zsolt    schedule 15.09.2014
comment
Вы говорите, что исправили свою первую проблему — можете ли вы сузить вопрос, чтобы вместо этого выделить другую проблему?   -  person thegrinner    schedule 15.09.2014