在有人怀疑之前,是的,我确实读过了其他解决方案,我的程序最近神秘地破解了。我没有对我的代码进行任何更改,只是今天尝试为朋友运行模拟以查看我的应用程序,我感到害怕:
尝试在不提示位置授权的情况下启动MapKit位置更新。必须首先调用 - [CLLocationManager requestWhenInUseAuthorization]或 - [CLLocationManager requestAlwaysAuthorization]。
好吧,我仔细检查了我的plist,是的,
NSLocationAlwaysUsageDescription
和
NSLocationAlwaysUsageDescription
仍在那里。
这是我的viewDidLoad方法:
- (void)viewDidLoad {
[super viewDidLoad];
[mainMapView setDelegate:self];
[mainMapView setShowsUserLocation:YES];
[manager setDelegate:self];
[manager requestWhenInUseAuthorization];
[manager requestAlwaysAuthorization];
[manager setDistanceFilter:kCLDistanceFilterNone];
[manager setDesiredAccuracy:kCLLocationAccuracyBest];
[manager startUpdatingLocation];
[search setDelegate:self];
[search setAlpha:0];
annotationArray = [[NSMutableArray alloc]init];
model = [[DataModel alloc]init];
}
有人有建议吗?
答案 0 :(得分:0)
为什么要使用这两个权限请求
[manager requestWhenInUseAuthorization];
[manager requestAlwaysAuthorization];
?
您是否为权限添加了正确的密钥?.plist文件?
NSLocationWhenInUseUsageDescription
或NSLocationAlwaysUsageDescription
答案 1 :(得分:0)
答案 2 :(得分:0)
务必检查经理是否为零!很容易忽视这一点。只需在viewDidLoad中放置一个断点,然后查看管理器的设置。
另一种导致失败的常见方法是初始化您的经理,但不要将其分配给某个属性。当您运行ARC时,它将在不再在范围内时释放。只需在视图控制器对象中将其设为属性即可。