2014-11-24 42 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

相關問題