【发布时间】:2013-02-18 17:53:04
【问题描述】:
有没有人知道什么会导致 locationManager 不收敛到一个值,即使定位服务是打开的?
编辑 1 - locationManager 对于某些用户可以正常工作,但对于其他用户,他们的位置永远不会更新。并且用户的设备(其位置从未更新)具有 GPS,因为这些设备是 iPhone 5、iPad3、iPhone 4 等。我想知道它们是否在该国太远并且总是在室内。所以 GPS、WiFi、手机信号塔无法到达它们?但不知何故他们上网......
编辑 2 - 更多说明:用户可以访问互联网,因为他们能够在我的网络服务器上创建一个新帐户。当 locationManager 收敛到一个值时,使用下面的#2,然后我的 web 服务器上的 gps 位置会更新,但这永远不会发生。用户在设备上使用应用程序的时间足以回答 10 个问题并上传他们的照片。如果用户可以访问互联网,那么 locationManager 的收敛时间还不够吗?
编辑 3 - 另一个奇怪的事情发生了:在网站上创建用户帐户时,用户的 gps_lat 设置为 0。当用户使用 iPhone 上的 locationManager 在网站上更新他的 gps_lat 时,更新后的gps_lat 的值为 (null)。什么可能导致 locationManager 产生 output = (null)?
-
我使用以下代码检查位置服务是否已开启:
BOOL locationServicesDenied = ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusDenied); -
然后,当 locationManager 与此代码融合时,我会更新用户在网站上的位置:
-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
if((newLocation.horizontalAccuracy > 0.0f) && (newLocation.horizontalAccuracy < 7000.0f){ [self update_website:self]; }
但是 update_website 永远不会被调用。这让我觉得 newLocation.horizontalAccuracy 永远不会低于 7000。
有没有人知道为什么即使位置服务打开,locationManager 也无法收敛?
【问题讨论】:
-
很可能该委托方法永远不会被调用。您可能会收到位置服务错误。实现其他委托方法并检查是否调用了哪个委托方法(如果有)。
-
我添加了一个编辑,指示为某些用户调用委托方法,因为他们的 gps 数据已更新。是否有什么东西可以阻止委托方法被某些用户调用,但又被其他用户调用?
-
如果没有错误且 GPS 无法获取位置,则不会调用代理。 GPS 将继续尝试获取位置,但如果设备在地下(例如),它将一无所获(除非有缓存的位置)。
标签: iphone ios ipad core-location cllocationmanager