当我禁用位置服务时,此警报会显示两次。第一次没有显示位置管理器目的属性。紧接着(在触摸第一个警报的按钮之前),它再次显示,这次包含目的属性。
当第二个警报被解除时,第一个警报仍然存在。
这有点烦人,我希望它会让用户感到困惑。
我只能用目的属性显示一次?
答案 0 :(得分:0)
我在我的app delegate中实例化了一个地图控制器对象和一个位置管理器对象。
mapController = [[[MapController alloc] initWithFrame:CGRectMake(0, 0, 0, 0)] retain];
[self restartLocationManager];
但是,在此代码中实例化位置管理器之前,不会设置位置管理器目的属性:
- (void) restartLocationManager {
if (locationManager)
[locationManager release];
locationManager = [[[CLLocationManager alloc] init] retain];
locationManager.purpose = NSLocalizedString(@"Location Service Purpose", nil);
locationManager.distanceFilter = kCLDistanceFilterNone;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[locationManager startUpdatingLocation];
}
因此,这是一个线索,即地图初始化中的某些内容触发了第一个警报。
由于我拒绝在第一个警报中启用位置服务,因此地图控制器已初始化并且需要显示警报。地图控制器初始化就是这个(它是单例的一部分,在这方面需要一些清理,但忽略了......):
- (id) initWithFrame:(CGRect)aFrame {
@synchronized(self) {
if (!theMap) {
if (!self) self = [super init];
theMap = [[[MKMapView alloc] initWithFrame:aFrame] retain];
theMap.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
theMap.showsUserLocation = YES;
theMap.delegate = self;
}
return self;
}
单步执行代码,我看到执行showUserLocation
行时出现第二个警报。我将不得不做更多的测试来缩小范围,但我认为我现在正走在正确的轨道上。