2014-09-28 44 views
8

基本上一半的時間委託方法CLLocationManager不工作的所有(iOS 8的時,Xcode 6)

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; 

根本沒有被調用的時候。但另一半的時間它完美的工作!我發現它通常是在關閉並退出它之後首次啓動Xcode時發生的,但之後或之後的一對運行似乎正常運行。我不是100%確定它是否只是一個Xcode問題或者什麼,我很快就會得到一個開發者許可證,所以我會看看它是否可以在實際設備上正常工作。

從viewDidAppear開始(在viewDidLoad中也嘗試過,沒有什麼區別),我運行一個方法來初始化我的LocationManager的東西:

locationManager = [[CLLocationManager alloc]init]; 

[locationManager setDelegate:self]; 
locationManager.distanceFilter = 20.0f; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
locationManager.pausesLocationUpdatesAutomatically = NO; 

if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) 
    [locationManager requestAlwaysAuthorization]; 

[locationManager startUpdatingLocation]; 

有時候這工作,有時沒有。我甚至做了個計時器,每隔幾秒鐘就重新運行一次,這是行不通的。

有什麼我應該做的嗎?這個問題有什麼答案嗎?

謝謝。

+0

位置管理器實際上只是爲了在設備上工作。在模擬器中,你有沒有嘗試設置位置? – Milo 2014-09-28 04:39:26

+0

你的意思是*一半的時間*?當操作系統有位置更新要傳遞時調用'didUpdateLocations'。有時它會,但其他時候(不太常見)它不會。 – Mike 2014-09-28 04:47:57

+0

幾件事情,你有一個'NSLocationAlwaysUsageDescription'添加到你的應用程序info.plist文件?你有兩個在模擬器中設置了一個位置? (Debug-> Location) – TyloBedo 2014-09-28 05:18:35

回答

0

加入viewdidappear

_locamangr = [CLLocationManager new]; 
    _locamangr.delegate = self; 
    // _locamangr.distanceFilter = kCLDistanceFilterNone; 
    _locamangr.desiredAccuracy = kCLLocationAccuracyBest; 
    if ([_locamangr respondsToSelector:@selector(requestAlwaysAuthorization)]) { 
     [_locamangr requestAlwaysAuthorization] ; 
     [_locamangr requestWhenInUseAuthorization]; 
    } 
    [_locamangr startUpdatingLocation]; 

和infoplist設置。 NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription

1
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; 

此委託方法被調用只有在新的位置可用。有時GPS不會得到衛星信號,因此無法獲取地點。所以在這些情況下,上述方法不會被觸發。由於您正在模擬器中進行測試,因此您應該更改或設置位置。我認爲它會在實際設備上正常工作。