【发布时间】:2011-04-13 12:16:41
【问题描述】:
我在 sim 卡或设备上都没有收到任何位置回调。我已经调用了这段代码:
- (void)startLocationCallbacks: (NSObject*) ignore
{
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
locationManager.distanceFilter = MINIMUM_METERS;
[locationManager startUpdatingLocation];
NSLog(@"[DEBUG] [locationManager startUpdatingLocation] (%@, %@)", locationManager, locationManager.delegate);
}
并在两者的顶部记录语句
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
和
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
但是没有一个日志语句被调用。我的应用启用了位置通知(如“设置”中所示,加上我说“允许”。)
我没有收到位置更新的可能原因有哪些?
配置/其他信息:
- 我已分配 locationManager,并将其保存在一个保留属性中。
- 我已调用 startUpdatingLocation
- 我使用的是 4.1 SDK
- 运行 4.1 的 Sim 和 iPod-touch(第 2 代)和 iPhone-3 都存在问题
- 位置通知在我的应用中是允许的(两者都显示在“设置”中,因为我在警报中单击了“允许”。)
- 我以前曾成功使用过 CLLocationManager(在许多运输应用程序中!)这对我来说真的是一个令人毛骨悚然的事情。
谢谢!
【问题讨论】:
-
注意:我见过其他几个类似的 SO 问题,它们没有帮助。整个“打开你的 wifi”、“不要使用 sim”等等,在这里都不适用。反正我不能说。我希望找到一份我可能无法收到回调的所有原因的列表,以便我可以检查它们。谢谢!
-
另一个线索:我在“设置”中关闭了位置通知,试图让它再次询问我。不问。此外,没有“用户被拒绝”错误 (didFailWithError:...) 就好像我的位置管理器没有启动一样。或者不承认我是代表。当我检查 locationManager.delegate 时,这是正确的。咕噜咕噜咕噜咕噜!
-
@vfn:尝试了你的技巧(将该代码挂钩到测试按钮),我的回调被调用并执行预期的操作。所以现在最大的问题是:什么会触发我的位置管理器不向我发送有效位置或错误? (即,我的 didUpdateLocation 和 didFailWithError 例程都没有被调用。)
-
将精度改为最佳并移除距离过滤器。
-
@MaxMacLeod:症状相似,但根本原因不同。这个问题更恰当地是“为什么我的已发布变量不能继续起作用?”而这个更像是“为什么我的动作没有放在一个永远不会得到任何时间的线程上?” :)