2014-03-07 67 views
0

我的應用程序需要位置服務才能工作,因此用戶會在第一次運行應用程序時被問到問題。 如果用戶說'OK',那麼它會在沒有它的情況下運行整個應用程序,因爲它會繼續執行它的工作。所以第一次運行它並沒有在視圖控制器上帶來任何東西。位置服務在IOS中,提示

當我第二次按下XCODE中的go按鈕時,它工作正常,因爲用戶已經授權使用位置服務來獲取緯度/經度。

有沒有人有過這個問題?有什麼建議?

+1

是什麼問題呢? –

+0

這個問題是它第一次運行,它不會將信息帶入視圖控制器,它的空白。第二次罰款! – user3328028

+0

您是否在應用中啓用了位置更新?請在設備 –

回答

0

在你viewDidLoad:

locationManager = [[CLLocationManager alloc] init]; 
[locationManager setDelegate:self]; 
[locationManager setDistanceFilter:kCLDistanceFilterNone]; 
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest]; 
[locationManager startUpdatingLocation]; 
+0

是的,這是viewdidload中的第一件事,然後它轉到事件didUpdateLocation,該事件接收lat.long並轉到數據庫。但是當您第一次安裝應用程序時,提示會要求授權,但在屏幕上出現此提示之前它會執行某些操作。我必須在桌面視圖和標籤輸入正確的數據之前至少運行兩次應用程序。 – user3328028

+0

所以你說的是在用戶點擊位置服務提示符上的「確定」按鈕之前,應用程序正在獲取座標。 –

+0

不,我沒有,提示出現,並且它去到委託didUpdateLocation,那很好!但是依賴於didUpdateLocation的數據的其他東西會在之前運行,並且會造成混亂。第二次運行它時,它的工作原理已經得到您的批准。 – user3328028

0

你需要做的,是更新視圖中的「didUpdateLocation」電話後,並稱之爲「SetNeedsDisplay」,所以你的觀點將它自己繪製到更新。 像這樣:

-(void)locationManager:(CLLocationManager *)manager 
didUpdateToLocation:(CLLocation *)newLocation 
fromLocation:(CLLocation *)oldLocation 
{ 

    self.LabellLatitude = [NSString stringWithFormat:@"%f",self.locationManager.location.coordinate.latitude]; 
    self.LabelLongitude = [NSString stringWithFormat:@"%f",self.locationManager.location.coordinate.longitude]; 
    [self.view setNeedsDisplay]; 

} 

如果添加了一個活動的指標intill的位置更新,甚至更好。

現在,如果你調用該從你的「的AppDelegate」類,你可以使用「NSNotificationCenter」要發送消息給你的視圖,以更新標籤,或視圖,或任何你需要的,就像這樣:

#pragma mark - locationManager: 
-(void)locationManager:(CLLocationManager *)manager 
didUpdateToLocation:(CLLocation *)newLocation 
fromLocation:(CLLocation *)oldLocation 
{ 

    [[NSNotificationCenter defaultCenter] postNotificationName:@"UpdatedLocation" object:nil userInfo:dictionary]; 


} 

並在您的UIViewController viewDidLoad中,該用戶註冊到notificaitons:

//Adding self to notification Center: 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView:) name:@"UpdatedLocation" object:nil]; 

希望這有助於