startMonitoringForRegion не всегда добавляет регионы в monitoredRegions - PullRequest
2 голосов
/ 27 октября 2010

Не могу заставить startMonitoringForRegion последовательно добавлять регионы.

        int i =0;
        for(Deals *d in  deals){
            NSLog(@"deal addRegionsInDealsArray %@",d.deal_id);
            if (d.latitude != NULL && d.longitude!=NULL && 
                ![d.latitude isEqualToNumber:[NSNumber numberWithInt:0 ]] && 
                ![d.longitude isEqualToNumber:[NSNumber numberWithInt:0 ]]) {

                CLLocationCoordinate2D dl = CLLocationCoordinate2DMake(
                [d.latitude doubleValue],
                [d.longitude doubleValue]);
                //NSLog(@"Lat addRegionsInDealsArray %@",d.latitude);

                CLRegion * clr = [[CLRegion alloc] initCircularRegionWithCenter:dl radius:radius identifier:d.deal_id];

                [locationManager startMonitoringForRegion:clr desiredAccuracy:kCLLocationAccuracyHundredMeters];
                NSLog(@"Region to add:%@",clr);
                [clr release];
                i++;
                if (i==10) {
                    break;
                }
            }
        }

Я поставил разрыв после 10, потому что он никогда не прибавлял больше 10 и падал где-то около 560 регионов. даже если его ограничить до 10 регистров, иногда он добавляет не 10, а только 8 (или 7, 9 или 0). Это не первые 8, которые добавляются.

Также, если у меня есть

NSLog(@"region count %i",[[locationManager monitoredRegions] count]);

сразу после туалета всегда выдает ошибку

ОШИБКА, Время, 309834541.397, Функция, "Boolean CLClientCopyMonitoredRegions (__ CLClient *, const __CFDictionary **)", Не удалось отправить успешно

Любые предложения о том, как успешно использовать startMonitoringForRegion?

edit: добавлен @try catch вокруг startMonitoringForRegion: и [[locationManager monitoredRegions] count], который выдает ошибку. Они по-прежнему выдает ошибку, но не пойман. Также перенес все это в цикл NSTimer, который срабатывает каждую секунду, если повторные вызовы вызывают проблемы. по-прежнему не удается случайно. иногда мой первый звонок не удался.

Приветствия

Ответы [ 3 ]

4 голосов
/ 05 декабря 2010

В Руководстве по программированию осведомленности о местонахождении

Вы всегда должны проявлять осмотрительность при определении набора областей для мониторинга.Регионы являются общим системным ресурсом, и общее количество регионов, доступных для всей системы, ограничено.По этой причине базовое расположение ограничивает количество регионов, которые могут одновременно контролироваться одним приложением.

0 голосов
/ 20 мая 2011

Это похоже на ошибку базы данных или что-то аналогичное. В течение некоторого периода времени после регистрации региона таблица блокируется (или, опять же, какой бы то ни было эквивалент за кадром, хотя я предполагаю, что это именно так). Поэтому вы не можете сделать счет. Попробуйте подсчитать после более длительного периода.

0 голосов
/ 27 октября 2010

если вы используете iPhone4, функция работает только на этом устройстве, проверьте с помощью

 [CLLocationManager regionMonitoringAvailable] 
...