Остановит ли stopMonitoringForRegion только дублированную область или также исходную область?

Я работаю над проектом мониторинга маяка, и в настоящее время я изучаю метод 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 ответ

Решение

Критическим моментом является использование другой строки для 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 значение.

Другие вопросы по тегам