我使用NavigationController来显示可供用户使用的地理围栏列表。在顶部有一个全局的开/关开关,我想用它来禁用CoreLocation -startMonitoringForRegion注册的任何围栏。
我的围栏似乎在大多数情况下注册并工作,但无论我单独禁用围栏多少次,我仍然得到紫色位置箭头,表明系统仍在监视我的位置和/或围栏。
当我单独禁用围栏时,我是这样做的。
CLLocationCoordinate2D coord;
coord.latitude = [[settingsData valueForKey:@"latitude"] doubleValue];
coord.longitude = [[settingsData valueForKey:@"longitude"] doubleValue];
CLLocationDistance radius = [[settingsData valueForKey:@"radius"] intValue];
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:coord radius:radius identifier:[settingsData valueForKey:@"name"]];
// remove this fence from system monitoring
[locationManager stopMonitoringForRegion:region];
[region release];
我已经阅读了苹果公司关于CoreLocation和这些方法使用的所有文档,我已经无路可走了。
我试过调用[locationManager monitoredRegions];
,但它只返回活动围栏,只有当我有我的详细信息视图加载。我不能在程序的其他地方调用它并让它返回我的篱笆,即使我知道它们应该是活跃的。如果谁有什么建议,我洗耳恭听。
或者,一个更简单的解决方案:
for (CLRegion *monitored in [locationManager monitoredRegions])
[locationManager stopMonitoringForRegion:monitored];
好了,我想我终于可以回答自己的问题了。这是否意味着我可以索要我的赏金?: D
首先,停留的位置箭头似乎是iOS的一个bug。我发现很多故事都有同样的问题。所以现在我也做不了什么了
至于一次删除所有区域,我现在已经完成了。
NSArray *regionArray = [[locationManager monitoredRegions] allObjects]; // the all objects is the key
for (int i = 0; i < [regionArray count]; i++) { // loop through array of regions turning them off
[locationManager stopMonitoringForRegion:[regionArray objectAtIndex:i]];
}
我能够显示我的数组并证明它们都在那里。取出后再检查一下,发现它们都不见了。哟! ! !位置箭头的问题仍然取决于你所运行的iOS版本。我想我不能。如果您有用户,请确保告诉他们紫色箭头不是您的错。关于这个问题的更多信息,你可以从这里开始。祝你好运。
是的,这是一个iOS漏洞。删除和重新安装应用程序没有帮助。我设法摆脱这个问题的唯一方法是重置位置警告