Остановит ли 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
значение.