【问题标题】:iPhone - CLLocationManager init returns niliPhone - CLLocationManager 初始化返回 nil
【发布时间】:2009-11-12 16:06:04
【问题描述】:

我正在使用自定义类来更新用户位置。初始化类时,我创建了一个供类使用的 CLLocationManager 对象

CLLocationManager *locManager = [[CLLocationManager alloc] init];
[self setLocationManager:locManager];

返回 nil 的行是 CLLocationManager *locManager = [[CLLocationManager alloc] init]; 这是导致问题的原因。

这段代码在大多数情况下都很好用。但是在一个特定的设备(操作系统版本 3.1)上,init 返回一个 nil。知道为什么 CLLocationManager 在初始化时会返回 nil 吗?

谢谢。

【问题讨论】:

    标签: iphone cllocationmanager


    【解决方案1】:

    当应用程序首次初始化定位服务时,操作系统会询问用户这是否可行。如果他们说不,那么在随后的运行中可能会得到零。您可能需要检查这一点并优雅地降级功能。

    【讨论】:

    • 但在此设备上进行测试时,我总是选择“确定”按钮。在某个时间点它崩溃了(再次由于位置服务),从那时起,每次 CLLocationManager 的值为 nil。用户不应该得到提示吗?
    • 我指出了一种位置服务可能返回 nil 的情况(尽管从技术上讲,您应该得到一个 locationManager:didFailWithError)。如果你不是,那么其他事情正在发生。可能想尝试在“设置”中重置位置警告,看看是否可以让您从头开始。
    • 我猜 didFailWithError 是 CLLocationManagerDelegate 的方法,除非 CLLocationManager 有值并且设置了它的委托,否则它不会被触发?这里 CLLocationManager 对象本身是 nil。添加代码并突出显示错误的行
    • 天啊!应该更多地关注你原来的问题。有一次,当用户说不时,我看到了这种行为。在它周围添加保护代码并降低处理它的功能。从那以后就没有问题了。我建议一个消除过程,看看它是用户偏好、内存管理、应用程序、操作系统还是设备。没有更多的上下文信息很难说。
    • 谢谢。我已经开支票了。但仍然听起来很可疑,如果位置服务关闭,则应该触发错误方法。为什么 CLLocationManager 为零?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多