2014-11-24 110 views
1

我正在测试Apple的AirLocate应用程序,并对此方法的行为有点困惑。为什么确定状态:forRegion:方法调用两次

我的代码:

  1. 我创建了一个CLBeaconRegion并将其添加到字典中像一个关键

    self.rangedRegions = [[NSMutableDictionary alloc] init]; 
    
    CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc]initWithUUIDString:@"E2C56DB5-DFFB-48D2-B060-D0F5A71096E0"] identifier:@"Group 57"]; 
    self.rangedRegions[region] = [NSArray array]; 
    
  2. 然后,我开始监视和测距

    for (CLBeaconRegion *region in self.rangedRegions) 
        { 
         [self.locationManager startMonitoringForRegion:region]; 
         [self.locationManager startRangingBeaconsInRegion:region]; 
        } 
    
  3. 委托方法

    - (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region 
    { 
        if(state == CLRegionStateInside) 
        { 
         NSLog(@"INSIDE REGION %@",region.identifier); 
        } 
        else if(state == CLRegionStateOutside) 
        { 
         NSLog(@"OUTSIDE REGION %@",region.identifier); 
        } 
        else 
        { 
         return; 
        } 
    } 
    

多数民众赞成我在日志中看到:

2014-11-24 16:10:42.482 AirLocate[741:60b] OUTSIDE REGION E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 
2014-11-24 16:10:42.977 AirLocate[741:60b] OUTSIDE REGION Group 57 

2014-11-24 16:11:31.061 AirLocate[741:60b] INSIDE REGION E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 
2014-11-24 16:11:31.656 AirLocate[741:60b] INSIDE REGION Group 57 

为什么打了两次都为CLRegionStateInside和CLRegionStateOutside这种方法吗?

为什么控制台输出UUID第一行然后是区域的标识符?正如你在代码中看到的那样,它应该只在控制台中是region.identifier(即“Group 57”)。

+0

http://stackoverflow.com/a/23146840 – TonyMkenu 2014-11-24 21:52:44

+0

我刚刚清理了代码,并重新安装应用程序,因为@davidgyoung写道,它的帮助。 – stsmkrv 2014-11-25 08:44:43

回答

3

它看起来像是从上一次运行您的应用程序的两个不同区域。尝试卸载并重新安装。

+0

谢谢你的回复。我刚刚创建了另一个简单的监控和测量应用程序,一切正常。我还清理了AirLocate应用程序中的代码,它也按预期工作。 – stsmkrv 2014-11-25 08:35:04

相关问题