0

我试图在我的应用程序中获取 iphone 的位置数据,但由于某种原因,我一直kclAuthorizationStatusNotDetermined在我的switch块中。

我知道在模拟器上启用了位置服务,并且我CLLocationManager在我的头文件中声明了一个事实,所以我知道它存在。

我的代码如下:

if ([CLLocationManager locationServicesEnabled])
{
    //check if this app is allowed to access geolocation
    switch ([CLLocationManager authorizationStatus])
    {
        case kCLAuthorizationStatusNotDetermined:
            // do something
            NSLog(@"Status not determined");
            break;

        case kCLAuthorizationStatusDenied:
            //do something
            NSLog(@"Status denied");
            break;

        case kCLAuthorizationStatusRestricted:
            //do something
            NSLog(@"Status restricted");
            break;

        case kCLAuthorizationStatusAuthorized:
            [manager startUpdatingLocation];
            CLLocation *currentCoords = [manager location];
            NSString *location = [currentCoords description];
            UIAlertView *gps = [[UIAlertView alloc]
                                initWithTitle:@"Current Location" message:location delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
            [gps show];
            //getHails or getDetails();
            break;
    }
}

我错过了什么吗?提前感谢您的帮助

4

1 回答 1

1

根据Apple 的 DockCLAuthorizationStatusNotDetermined意味着“用户尚未选择此应用程序是否可以使用位置服务。” 我已经看到其他消息来源声称当位置服务存在其他障碍时可能会发生这种情况,例如为应用程序启用了位置服务但未在设备上打开。

如果位置服务已关闭或尚未为应用启用,iOS 通常会提示用户。此外,如果用户之前拒绝了应用程序的定位服务,但无论如何您以编程方式启动定位服务,我认为用户会被提示打开它们。您是否看到这种行为或不同的东西?

为了清楚起见,当您说位置服务已打开时,您检查了位置服务是否已在全球范围内打开,并且它们已为您的特定应用启用,对吗?

在模拟器中运行应用程序时,在重新安装之前从模拟器中完全删除应用程序可能会有所帮助,这样设置包就会被删除。这应该重新初始化您的应用程序位置服务的应用程序级授权的任何已保存状态。

编辑:

如果您没有看到提示您启用位置服务的弹出窗口,那么听起来您确实没有在拨打[<your location manager instance> startUpdatingLocation]. 你确定这会被调用吗?

于 2012-09-24T21:01:51.790 回答