質問: (CLBeaconRegion*)region; [manager startRangingBeaconsInRegion:beaconRegion]; break; case CLRegionStateOutside: NSLog(@"CLRegionStateOutside"); break; } -(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region { NSLog(@"EnterRegion."); [manager startRangingBeaconsInRegion:(CLBeaconRegion*)region]; } -(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region { NSLog(@"ExitRegion."); [manager stopRangingBeaconsInRegion:(CLBeaconRegion *)region]; } -(void)locationManager:(CLLocationManager *)manager didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region { NSLog(@"FindBeacon."); } ```
回答: 参考になるかわかりませんが、気になったところを幾つか書かせて頂きます。 * `startRangingBeaconsInRegion`の実行が多い iBeacon領域外から領域内に入った場合、`didDetermineState`と`didEnterRegion`が呼ばれます。また、既にiBeacon領域にいる状態でアプリを起動すると、`didDetermineState`のみ呼ばれます。(**didEnterRegion**は呼ばれません) なので、私の場合は`startRangingBeaconsInRegion`を`didDetermineState`の`CLRegionStateInside`を通った時のみにしています。 * `requestStateForRegion`の実行について 一連の流れとしては、アプリをフォアグラウンド起動させっぱなしの話かと思います。 私の場合は既にiBeacon領域内にいる状態でアプリを起動したところ、 `didDetermineState`が呼ばれなかったため、 `requestStateForRegion`を実行してiBeaconを検知するようにしていました。 因みに、端末の電源がOFFの状態からONにした直後はiBeaconを検知してくれませんでした。 後は特に問題なさそうに見えます。 何かの参考になれば幸いです。