我的应用程序需要使用位置服务,因此在首次运行应用程序时会询问用户问题。 如果用户说“OK”,那么它将在没有它的情况下运行整个应用程序,因为它将继续执行其工作。所以第一次运行它并没有真正带来视图控制器上的任何东西。
当我第二次按下XCODE中的go按钮时,它工作正常,因为用户已经授权使用位置服务来获得lat / long。
以前有人有这个问题吗?有什么建议?
答案 0 :(得分:0)
在viewDidLoad:
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[locationManager startUpdatingLocation];
答案 1 :(得分: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];
}
如果您添加活动指示符,直到位置更新,那就更好了。
现在,如果你从“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上,用户注册到通知:
//Adding self to notification Center:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateView:) name:@"UpdatedLocation" object:nil];
希望这有帮助