stopMonitoringForRegion是否仅停止重复区域或原始区域?

时间:2018-05-02 09:41:17

标签: ios objective-c cllocationmanager ibeacon clbeaconregion

我正在开发一个信标监控项目,目前我正在调查stopMonitoringForRegion方法。我正在做的是,复制原始区域并开始新的监控。 30-60秒后,我停止复制的区域:

[self.locationManager stopMonitoringForRegion:self.duplicatedRegion];

因此原始和重复区域的次要和主要ID是相同的。当我停止监控重复区域时,我还会停止原始区域吗?因为次要和主要ID是相同的。原始区域和重复区域之间的唯一区别是标识符。原始的具有供应商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 :(得分:1)

关键点是为identifier字段使用不同的字符串:

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

如果originalRegion的{​​{1}} identifier且重复的testRegion具有相同的值,则会导致您描述的症状。这是因为 CoreLocation使用identifier字段来表示Region个对象是相同的,允许您将一个对象替换为另一个对象。

要让两个区域同时处于活动状态,只需提供不同的identifier值即可。