IOS定位服务,提示
Posted
技术标签:
【中文标题】IOS定位服务,提示【英文标题】:Location Services in IOS, prompt 【发布时间】:2014-03-07 10:39:12 【问题描述】:我的应用程序需要定位服务才能工作,因此当应用程序首次运行时,用户会被问到这个问题。 如果用户说“OK”,那么它将在没有它的情况下运行整个应用程序,因为它会继续工作。所以第一次运行它并没有真正在视图控制器上带来任何东西。
当我第二次在 XCODE 中按下 go 按钮时,它工作正常,因为用户已经授权使用位置服务来获取纬度/经度。
以前有人遇到过这个问题吗?有什么建议吗?
【问题讨论】:
那是什么问题? 问题是它第一次运行时,它没有将信息带入视图控制器,它是空白的。第二次好了! 您是否在应用程序中启用了位置更新?在设备的位置服务设置下检查它 是的,因为您会收到授权定位服务的提示。 所以第一次,它提示允许 loc 服务,然后你按 OK,然后应用程序在没有它的情况下运行,我认为它更多地与应用程序流有关。第二次完美运行。 【参考方案1】:在你的viewDidLoad:
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDistanceFilter:kCLDistanceFilterNone];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[locationManager startUpdatingLocation];
【讨论】:
是的,这是 viewdidload 中的第一件事,然后它转到接收 lat.long 并转到数据库的事件 didUpdateLocation。但是当您第一次安装该应用程序时,会出现提示请求授权,但它会在此提示出现在屏幕上之前执行操作。在 tableview 和 label 带有正确数据之前,我必须至少运行该应用程序两次。 所以您是说应用程序在用户单击位置服务提示上的“确定”按钮之前获取坐标。 不,我不是,提示出现了,它转到了代理 didUpdateLocation,没关系!但是其他依赖于 didUpdateLocation 数据的东西之前运行过,这让事情变得混乱。第二次运行它,它就可以工作,因为它已经得到了你的批准。 所以你在看什么,我无法理解你的问题。【参考方案2】:您需要做的是在“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];
希望对你有帮助
【讨论】:
以上是关于IOS定位服务,提示的主要内容,如果未能解决你的问题,请参考以下文章