gpt4 book ai didi

ios - 如何为 CLCircularRegion 和 CLBeaconRegion 定义组合进入/退出事件?

转载 作者:行者123 更新时间:2023-11-28 19:27:59 24 4
gpt4 key购买 nike

我正在监视 iOS 中的 iBeacon 和圆形区域。如果我尝试分别定义它们:

- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLCircularRegion *)region {}
- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLBeaconRegion *)region {}

很明显是重复声明错误。 This SO answer很好地表明,如何区分哪个区域开火。为了做到这一点,我正在尝试弄清楚如何定义每个人都会满意的公共(public)区域退出事件。如果我使用 CLRegion 组合它们,将会出现各种警告:

- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
if (region.class == CLCircularRegion.class) {
CLLocationCoordinate2D coordinate = [region center]; // Deprecation warning, use CLCircularRegion instead
// etc...
}
if (region.class == CLBeaconRegion.class) {
[locationManager stopRangingBeaconsInRegion:region]; // Incompatible pointer types warning
// etc...
}
}

我最初使用 didDetermineState 定义了信标处理,但它会导致一些额外的事件。例如。 CLRegionStateOutside 最初会为所有受监控的区域触发,这完全合适,但我不需要知道这一点,所以我宁愿使用 didExitRegion

是否有一种正确的方法来编写一个干净的组合 didExitRegion,以便它可以处理圆形区域和信标区域而不会出现错误或警告?

最佳答案

方法签名由 CLLocationManagerDelegate 协议(protocol)定义,并且是:

- (void)locationManager:(CLLocationManager *)manager 
didExitRegion:(CLRegion *)region;

如果要调用该方法,则必须使用此签名。

通过检查您经过的区域类型,您走在了正确的轨道上。你缺少的一点是使用强制转换将 region 分配给适当子类的变量,这样当你尝试做子类特定的事情时就不会收到警告/错误。

请注意,使用 isKindOfClass: 比直接比较类更安全。 isKindOfClass 如果对象是指定类的实例或指定类的子类,则返回 YES。因此,如果 Apple 进行了一些内部更改并开始向您发送作为 CLBeaconRegion 子类的 CLNewBeaconRegion 对象,您的代码仍然有效。

- (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
if ([region isKindOfClass:CLCircularRegion.class]) {
CLCircularRegion *circularRegion = (CLCircularRegion *)region;
CLLocationCoordinate2D coordinate = circularRegion.center;
// etc...
} else if ([region isKindOfClass:CLBeaconRegion.class]) {
CLBeaconRegion *beaconRegion = (CLBeaconRegion *)region;
[locationManager stopRangingBeaconsInRegion:beaconRegion];
// etc...
}
}

关于ios - 如何为 CLCircularRegion 和 CLBeaconRegion 定义组合进入/退出事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com