2014-09-27 106 views
3

我與SignificantLocationChanges一個問題,因爲iOS的8的方法SignificantLocationChanges不起作用,因爲iOS的8

[locationManager startMonitoringSignificantLocationChanges]; 

被稱爲正確檢查可用性後,與會代表還不錯的工作的釋放(我檢查它與didChangeAuthorizationStatus方法是同一個委託和對象的一部分),編譯器毫無疑問,但絕對沒有更新,也沒有來自didFailWithError方法的錯誤。日誌說authorizationStatus是4,這是我認爲沒關係。

在iOS 8之前,這一切正常。

當我使用正常的startUpdatingLocation方法時,第一個測試設備(帶有3G的iPad 2)運行iOS 7.1.2第二個(iPhone 5)8.0.2,我立即得到更新。但是SignificantLocationChanges對我的工作會更好。有沒有人有一個想法,錯誤可能是哪裏?

+0

或許表現出一定的代碼。就像我說這是工作的罰款,我 – Paulw11 2014-09-27 10:21:14

回答

5

在iOS 8中,您必須請求類型爲「始終」的授權,以允許您的應用使用重要位置。

在-Info.plist文件中添加一個新行鍵NSLocationAlwaysUsageDescription enter image description here

然後請求授權如果尚未要求。

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status 
{ 
    if (status == kCLAuthorizationStatusNotDetermined && [manager respondsToSelector:@selector(requestAlwaysAuthorization)]) { 
     [manager requestAlwaysAuthorization]; 
    } 
} 
0

你有沒有想起調用方法

-requestAlwaysAuthorization 
(or -requestWhenInUseAuthorization) 
您CLLocationManager

?這是iOS 8中的一種新方法,需要在啓動位置更新之前調用它。

另外,請仔細檢查您是否在主線程上分配並調用-startUpdatingLocation。我不確定這一點,但我認爲在不同的線程上調用它可能會導致問題。

3

我在與startMonitoringSignificantLocationChanges太多的問題..

我加入了[self.locationManager requestWhenInUseAuthorization];並添加NSLocationWhenInUseUsageDescription字符串plist文件。

當我運行我的應用程序一切正常,該didChangeAuthorizationStatus委託方法調用,但是到了didUpdateLocationdidFailWithError委託方法沒有任何活動..

但是當我切換到startUpdatingLocation,奇蹟般地它的作品!但我需要startMonitoringSignificantLocationChanges工作,因爲我不希望我的應用程序消耗電池的事件,我不需要!

更新!問題解決了!

哦,我明白了爲什麼它現在不工作!新SDK參考here in this link說;

「在使用位置服務之前,您必須調用此方法或requestAlwaysAuthorization方法。如果用戶向您的應用程序授予」使用時「授權,則您的應用程序可以啓動大多數(但不是全部)位置服務(應用程序不能使用自動重新啓動應用程序的任何服務,例如區域監控或重要的位置更改服務。)」

所以這是不可能使用startMonitoringSignificantLocationChanges[self.locationManager requestWhenInUseAuthorization];方法。你必須使用requestAlwaysAuthorization而不是!

+0

:) – msmialko 2014-09-28 09:45:42

+0

沒有,你必須使用它們兩個。在iOS 10上測試。 – AndaluZ 2017-07-13 10:18:04