【问题标题】:Property not found on object that I know has that property在我知道具有该属性的对象上找不到属性
【发布时间】:2014-12-19 21:08:51
【问题描述】:

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

if (manager.authorizationStatus == kCLAuthorizationStatusAuthorizedWhenInUse) {
}

哪个未能构建,因为它说“在'CLLocationManager *'类型的对象上找不到属性'authorizationStatus'。严重吗?因为我不仅确定CLLocationManager应该具有根据Apple文档@的authorizationStatus属性987654321@ 但它也会在我键入时自动完成属性。我现在完全不知道该怎么做。

最重要的是,我有

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 不会进行调用并且不会警告您。

难以置信。

【问题讨论】:

    标签: xcode mapkit cllocationmanager


    【解决方案1】:

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

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

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

    【讨论】:

    • 听起来像一个 Xcode 错误,不幸的是:/ 可能 file a Radar?
    • 另外,您对为什么我的授权没有被要求有任何想法吗?
    • 我会这样做,当然苹果需要解决 iOS SDK8 的漏洞。要么就是这样,要么我只是一个糟糕的程序员,但是我在 SDK 8 中遇到了很多我在 SDK 7 中没有遇到过的障碍
    猜你喜欢
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2023-02-12
    • 1970-01-01
    相关资源
    最近更新 更多