Остановит ли stopMonitoringForRegion только дублированную область или также исходную область? - PullRequest
0 голосов
/ 02 мая 2018

Я работаю над проектом мониторинга маяка, и в настоящее время я исследую метод stopMonitoringForRegion. То, что я делаю, - дублирую исходный регион и начинаю новый мониторинг для него. Через 30 - 60 секунд я останавливаю скопированную область:

[self.locationManager stopMonitoringForRegion:self.duplicatedRegion];

Таким образом, исходный и дублированный регионы минорных и основных идентификаторов совпадают. Когда я прекращаю мониторинг дублированного региона, я также останавливаю исходный регион? Потому что младшие и главные идентификаторы одинаковы. Единственная разница между исходной и дублированной областью заключается в идентификаторах. Оригинал имеет GUID поставщика, в то время как дубликат имеет строку «testRegion».

self.duplicatedRegion = [[CLBeaconRegion alloc] initWithProximityUUID:self.originalRegion.proximityUUID
                                                                  major:[self.originalRegion.major intValue]
                                                                  minor:[self.originalRegion.minor intValue]
                                                             identifier:@"testRegion"];
        self.duplicatedRegion.notifyEntryStateOnDisplay = NO;
        self.duplicatedRegion.notifyOnEntry = YES;
        self.duplicatedRegion.notifyOnExit = YES;

        [self.locationManager startMonitoringForRegion:self.duplicatedRegion];

Я спрашиваю об этом, потому что, когда я прекращаю мониторинг дублированного региона, приложение больше не получает события входа и выхода из региона. В своем коде я проверяю, отслеживается ли исходный регион, и да, он находится в массиве self.locationManager monitoredRegions. Также я никогда не останавливаюсь в оригинальном регионе. Я только начинаю и останавливаю дубликат.

1 Ответ

0 голосов
/ 02 мая 2018

Критическим моментом является использование другой строки для поля identifier:

self.duplicatedRegion = [[CLBeaconRegion alloc] initWithProximityUUID:self.originalRegion.proximityUUID                                                      
major :[self.originalRegion.major intValue]                                                 
minor :[self.originalRegion.minor intValue]                                                        
identifier :@"testRegion"];

Если originalRegion имеет identifier из testRegion, а дублированный имеет то же значение, это вызовет описанные вами симптомы. Это связано с тем, что CoreLocation использует поле identifier, чтобы указать, что объекты Region совпадают, что позволяет заменить один объект другим.

Чтобы обе области были активны одновременно, просто укажите другое значение identifier.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...