2012-01-23 45 views
2

当我禁用位置服务时,此警报显示两次。第一次没有显示位置管理器目的属性。紧接着(在第一次提醒按钮被触摸之前),它再次显示,这次包括目标属性。iOS:为什么启动时会显示两次“打开位置服务”警报?

当第二次提醒被解除时,第一次提醒仍然存在。

这有点烦人,我希望它会让用户感到困惑。

我能做些什么只显示一次,目的属性?

+0

你能否包含一些实际的代码来帮助我们多一点帮助你? –

+0

首先,我只想知道这是典型的行为还是不正常?如果情况不正常,我会再捅一些,看看可能是什么原因造成的。我在禁用位置服务方面没有玩过太多,所以这对我来说是新的。 – Jim

+0

这不是默认行为,很可能你做错了什么。请张贴一些代码如何使用位置管理器? – saadnib

回答

0

我有一个地图控制器对象和在我的应用程序委托中实例化的位置管理器对象。

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行被执行。我将不得不做更多的测试来精确地缩小它,但我认为我现在正处在正确的轨道上。

+0

我有类似的问题,但我不能为我的生活找出什么是触发警报。除非位置服务已获得应用程序的授权,否则我不会开启重要的变更监控。 我的任何提示?老实说,警报似乎很随机。 – elsurudo

相关问题