gpt4 book ai didi

ios - 为什么我的 CLLocationManager 没有响应 startMonitoringForRegion?

转载 作者:可可西里 更新时间:2023-11-01 05:57:39 25 4
gpt4 key购买 nike

在底部(在 AppDelegate.m 中)您可以看到我的 CLLocationManager 委托(delegate)方法,它们都没有被调用。我正在使用 GPX 文件,但即使没有进入或退出区域,也应该调用委托(delegate)方法 didStartMonitoringForRegion

SomeOtherClass.m

AppDelegate appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.locationManager startMonitoringForRegion:regionToMonitor desiredAccuracy:kCLLocationAccuracyNearestTenMeters];

AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate,CLLocationManagerDelegate>
@property (nonatomic, retain) CLLocationManager *locationManager;

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
if (locationManager==nil) {
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
}

return YES;
}

-(void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
NSLog(@"Did enter region");
}

-(void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
NSLog(@"Did exit region");
}

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
NSLog(@"Fail");
NSLog(@"%@", [error description]);
}

-(void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region {
NSLog(@"Did start monitoring for region: %@", region.identifier);
}

最佳答案

首先你应该添加下面的Location manager委托(delegate)方法,看看是否由于某种原因区域监控注册失败:

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

其次,区域监控是系统共享资源。该文档指出,它允许您监控有限数量的区域(不幸的是没有指定任何数量),并提到如果另一个应用程序注册了额外的区域来监控,您的一些应用程序监控区域可能会被丢弃。

第三,区域监测没有使用任何GPS技术。它仅使用您的网络运营商的蜂窝天线,每当您更换手机信号塔时,它都会触发一个系统事件,循环遍历所有受监控的区域,并查看某个区域是否在您现在所在的新区域内。

这意味着您应该期望服务的准确性较低,因此您应该增加为区域设置的半径。

最后,如果您的应用程序完全终止且未暂停,那么您的应用程序将在应用程序委托(delegate)中接收:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

launchOptions 字典中的 UIApplicationLaunchOptionsLocationKey。然后,您有责任在您的应​​用程序事件状态的有限时间内重新初始化您的位置管理器,获取当前位置并向用户发送本地推送通知。

因为应用在那个阶段不会正常运行,而是处于受限的后台模式状态。

此外,如果您想在模拟器中测试该应用程序,您应该将 track.gpx 文件添加到您的项目并将模拟器设置为跟踪模式。确保您放置在模拟器中的 2 个位置不是很远(因为完成跟踪可能需要很长时间)并将它们设置在一条路径中,它将进入您的监控区域。然后看看你是否收到任何回调。不要用你的设备测试它,因为你需要实际走几个街区才能看到与设备的任何真实互动:-)

关于ios - 为什么我的 CLLocationManager 没有响应 startMonitoringForRegion?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9943306/

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