iOS 位置权限无法由 Objective-C 显示

Posted

技术标签:

【中文标题】iOS 位置权限无法由 Objective-C 显示【英文标题】:iOS Location permission not work to show by Objective-C 【发布时间】:2019-04-17 16:34:07 【问题描述】:

我创建了一个示例项目来获取用户位置。 但是当我运行该应用程序时,位置权限不会显示给我。 我的代码有什么问题? 谢谢。

ViewController.h

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@interface ViewController : UIViewController<CLLocationManagerDelegate>

@property (nonatomic, strong) CLLocationManager *locationManager;

@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()
@property (weak, nonatomic) IBOutlet UILabel *latLabel;
@property (weak, nonatomic) IBOutlet UILabel *longLabel;

@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];

    self.locationManager.delegate = self;
    [self.locationManager requestWhenInUseAuthorization];
    [self.locationManager startUpdatingLocation];


-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations

    CLLocation *currentLocation = [locations lastObject];
    if(currentLocation != nil)
        self.latLabel.text = [NSString stringWithFormat:@"%.2f",currentLocation.coordinate.latitude];
        self.longLabel.text = [NSString stringWithFormat:@"%.2f",currentLocation.coordinate.longitude];
        [self.locationManager stopUpdatingLocation];
    


@end

【问题讨论】:

【参考方案1】:

您需要首先检查locationServicesEnabled。如果已启用,请先致电authorizationStatus 了解您应用的实际授权状态。仅当状态为“未确定”时才请求授权对话框。

如果状态是别的,那么请求授权对话框是没有意义的;它不会出现。

另一个问题是这段代码没用:

-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations

    CLLocation *currentLocation = [locations lastObject];
    if(currentLocation != nil)
        self.latLabel.text = [NSString stringWithFormat:@"%.2f",currentLocation.coordinate.latitude];
        self.longLabel.text = [NSString stringWithFormat:@"%.2f",currentLocation.coordinate.longitude];
        [self.locationManager stopUpdatingLocation];
    

您在获得first位置更新后立即致电stopUpdatingLocation。但是您在第一次位置更新时获得有用位置的机会基本上为零,因为传感器刚刚开始升温。

(另请注意,在后台模式中检查“位置更新”是没有意义的。除非您将位置管理器的allowsBackgroundLocationUpdates 设置为“是”,否则您不会在后台获得任何位置更新,并且您没有这样做.)

【讨论】:

以上是关于iOS 位置权限无法由 Objective-C 显示的主要内容,如果未能解决你的问题,请参考以下文章

IOS/Objective-C:检测 UIVIew 上的滑动和屏幕相同位置的按钮触摸

iOS从手机相册选择一张照片并显示 Objective-C

无法从 Objective-C 视图控制器访问 Swift var - iOS

ios学习路线—Objective-C(堆(heap)和栈(stack))

iOS Today 扩展/小部件——位置权限?

获取我在 photoLibrary iOS Objective-c 中选择的视频的位置元数据