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定位服务,提示的主要内容,如果未能解决你的问题,请参考以下文章

iOS手机差距——推送通知不显示通知服务提示框

ios app实现定位功能 权限提示框应该在啥弹出

如何防止iOS应用程序中的地理定位双重提示?

iOS CLLocationManager 定位

ios app - 打开系统设置URL

定位服务在 iOS 6 中不起作用 [重复]