gpt4 book ai didi

iphone CLLocationmanager区域监控回调未触发

转载 作者:行者123 更新时间:2023-12-03 18:45:58 25 4
gpt4 key购买 nike

我正在尝试使用监控区域来跟踪用户是否访问过地标。位置管理器与 map 套件一起在 View Controller 中初始化

在 View Controller 的viewdidload中:

if (self.locationManager == nil)
{
// NSLog(@"creating location manager");
self.locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
locationManager.distanceFilter = kCLDistanceFilterNone;
}


NSSet* set=[locationManager monitoredRegions];

if ([CLLocationManager regionMonitoringAvailable] && [CLLocationManager regionMonitoringEnabled]) {
NSLog(@"region monitoring okay");
NSLog(@"monitored regions: %@",set);
}

我得到了 NSLogs“区域监控正常”并且所有区域都正确。

添加区域就像这样完成

double metres=20.0;
CLLocationDistance dist=metres;
CLLocationAccuracy acc=1.0;

CLRegion *reg=[[CLRegion alloc] initCircularRegionWithCenter:coordinate radius:dist identifier:landmarkObj.landmarkName];

[locationManager startMonitoringForRegion:reg desiredAccuracy:acc];

但回调均未触发

 - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Entered"
message:region.identifier
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alert show];
}

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Exited"
message:region.identifier
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil, nil];
[alert show];
}

- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region
{
NSLog(@"started monitring for region: %@",region);
}

- (void) locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error
{
NSLog(@"%@",error);
}

但是更新位置效果很好。

[locationManager startUpdatingLocation];

按预期触发回调 didUpdateToLocation

更新:改为使用 didUpdatToLocation 来监视区域。仍然有兴趣知道为什么这行不通,看起来很少有人在区域监控方面取得成功

最佳答案

区域跟踪功能用于低粒度位置跟踪,并在单元位置边界上触发,因此如果您不跨越单元边界,则永远不会检查您的区域。我遇到了同样的问题并对此进行了研究,另一个网站对此有一条评论,指出了这个苹果论坛:

https://devforums.apple.com/message/251046#251046

如果您阅读了所有评论,您就会明白为什么这不起作用。

我正在尝试解决我定义自己的 NSSets 以包含跟踪的 CLRegions 和占用的 CLRegions 的问题,然后当我得到 locationManager:didUpdateToLocation:fromLocation: 回调时,我检查跟踪集中的所有区域以查看我是否不在 inRegions 集中但现在位于跟踪区域(添加到 inRegions 并使用 EnterRegion 回调),或者如果我在 inRegion 但现在不在(从 inRegions 中删除并使用 exitRegion 回调)。目前这项工作正在进行中。

关于iphone CLLocationmanager区域监控回调未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8586803/

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