2016-09-28 41 views
0

我正在嘗試訪問用戶的位置以顯示天氣數據。我正在使用此代碼:我無法獲得許可後的位置數據

if(self.locationManager == nil) { 
    self.locationManager = [[CLLocationManager alloc] init]; 
    self.locationManager.delegate = self; 
} 

// Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7. 
if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) { 
    NSLog (@"ENTERING requestWhenInUseAuthorization",nil); 
    [self.locationManager requestAlwaysAuthorization]; 
} 
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
[self.locationManager startUpdatingLocation]; 

CLLocation *location = [self.locationManager location]; 
[self.locationManager stopUpdatingLocation]; 
NSString *latitude = [[NSNumber numberWithDouble:location.coordinate.latitude] stringValue]; 
NSString *longitude = [[NSNumber numberWithDouble:location.coordinate.longitude] stringValue]; 

事情是我彈出詢問使用當前位置的權限。我接受但我沒有得到任何位置,它的值是nil。當我去設置它說我有權訪問數據,但我沒有得到它,除非我關閉應用程序並再次打開它。 現在有辦法獲得位置嗎?我做錯了什麼?

+0

你必須定義一個'CLLocationManagerDelegate'並等待位置更新(在'locationManager:didUpdateLocations:'方法中)。這種方法會被多次調用,每一個都有更高的準確性。 **有**你想獲得你的'CLLocation'實例。 –

回答

1

您正嘗試儘快訪問該位置。您需要實施locationManager:didUpdateLocations:委託方法。當一個位置可用時它將被調用。

如果你只想要一個位置,你可以在委託方法內部調用stopUpdatingLocation

+0

工作! 請問日曆中是否也有類似的東西,請求訪問日曆的權限後,我想顯示日曆事件,但除非我退出視圖並再次返回,否則它們不會顯示。 – Lara

+0

這是一個完全不同的問題。我會建議發佈一個新的問題,包括所有相關的代碼和有關該問題的詳細信息。 – rmaddy

+0

我對此已表示歉意,並非常感謝您的幫助。 http://stackoverflow.com/questions/39772054/how-to-know-when-calendar-finishes-loading – Lara