在我知道的对象上找不到的属性具有该属性

时间:2014-12-19 21:08:51

标签: xcode mapkit cllocationmanager

我开始对MapKit感到非常沮丧。首先,我有

if (manager.authorizationStatus == kCLAuthorizationStatusAuthorizedWhenInUse) {
}

未能建立,因为它说" Property' authorizationStatus'没有找到类型为' CLLocationManager *'的对象。真的吗?因为我不仅确定CLLocationManager应该具有根据Apple文档https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html的authorizationStatus属性,而且它还在我键入时自动填充属性。我真的不知道现在该做什么。

最重要的是,我有

if (!manager) {
    NSLog(@"manager created in viewDidLoad");
    manager = [[CLLocationManager alloc]init];
    manager.delegate = self;
    [manager requestWhenInUseAuthorization];
    NSLog(@"manager is supposed to ask for permission");
}

两个NSLog语句都被调用,但是没有要求授权,因此我收到错误。是的,我还在我的plist文件中添加了必要的密钥字符串,因为该应用程序正在我的手机上运行,​​但在其他人的手机上我收到此错误。唯一可能的解释是我在寻求许可之前尝试使用MapKit,但我已经彻底检查过,并且没有找到类似的东西。它甚至没有显示要求许可的警告框。

如果有人可以帮助解决这些问题,我们将不胜感激。直到那时我才无所事事,因为我已经尝试了一切。

编辑:我发现了问题。我有两个plist键NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescription ......其中只有一个略有错误。如果plist条目缺失或拼写错误且没有警告您,Apple API不会拨打电话。

难以置信。

1 个答案:

答案 0 :(得分:15)

+authorizationStatus是CLLocationManager上的类方法,而不是属性。您将其调用为:

if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse) {
    //...
}

这表示在方法名称前面使用+(而不是-,这表示实例方法,或缺少通常伴随属性的符号)。