2012-01-23 57 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

相關問題