2012-07-27 64 views
10

無論用戶何時登錄以及在其他幾個地方,我都會調用當前位置。 每當我這樣做,要求用戶許可的警報視圖會出現一秒左右,然後它會消失。 顯然,我沒有得到位置。這發生在每次我提示位置時。 它不允許用戶單擊取消或確定。 請幫忙CLLocationManager警報自己被解僱

+1

得到了由自己解決。 :) – 2012-08-02 06:33:20

+0

我也遇到了這個問題,似乎無法理解爲什麼!? – tagyro 2012-10-29 16:34:48

回答

14

這很可能是你沒有保留locationManager。因此,當您撥打[CLLocationManager startUpdatingLocation]時,會顯示警報,但只要locationManager被釋放,警報就會消失。當我輸入assign而不是strong時,它發生在我曾經爲我的locationManger實例創建的屬性上。

+0

爲什麼我沒有想到這個?謝謝。 – DCMaxxx 2015-12-01 14:35:21

+0

@NikitaP這應該被標記爲答案。 – 2016-04-03 01:14:18

0

在我的項目中遇到同樣的問題(swift lang)。

試試這個,聲明CLLocation管理變量作爲全局變量並且調用你想要的地方。

例如:

var locManager = CLLocationManager() 

    override func viewDidLoad() 
    { 


    super.viewDidLoad() 

let iOS7 = floor(NSFoundationVersionNumber) <= floor(NSFoundationVersionNumber_iOS_7_1) 

let iOS8 = floor(NSFoundationVersionNumber) > floor(NSFoundationVersionNumber_iOS_7_1) 

      locManager.delegate = self 
      locManager.desiredAccuracy = kCLLocationAccuracyBest 
      if(iOS8) 
      { 
       locManager.requestAlwaysAuthorization()// only support ios 8.0 
      } 

    } 
0

嘗試startUpdatingLocation後移動委託setter方法。這個對我有用。 例如:

CLLocationManager *m = [[CLLocationManager alloc] init]; 
[m startUpdatingLocation]; 
m.delegate = self; 

Opz,我可憐的英語。

0

我不能評論他的帖子,所以我在這裏回答。

Gianluca Tranchedone是對的。我的情況,我保留了CLLocationManager。但是:它在AlertView顯示之後觸發第一個回調,告訴代表狀態未定。當接收到任何回調時,我犯了錯誤以釋放實例。

這是該方法現在看起來和它的作品:

-(void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { 
switch (status) { 
    case kCLAuthorizationStatusNotDetermined: 
     break; 
    default: 
     _locationManagerForAuthorizationRequest.delegate = nil; 
     self.locationManagerForAuthorizationRequest = nil; 
} 

}