所以我使用parse来更新来自该查询的用户位置和数据,如下所示:
-(void) getUserLocationAndData:(BOOL) showProgress
{
[PFGeoPoint geoPointForCurrentLocationInBackground:^(PFGeoPoint *geoPoint, NSError *error)
{
if (!error)
{
NSLog(@"Got current location - Zooming Map!");
CLLocationCoordinate2D zoomLocation;
zoomLocation.latitude = geoPoint.latitude;
zoomLocation.longitude = geoPoint.longitude;
[self getNearByData:geoPoint];
}
else
{
[[[UIAlertView alloc] initWithTitle:@"Unable to get Current Location" message:@"This app needs your current location in order to locate near by data. Please check your internet connection and make sure you enabled access to the location information." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil] show];
}
}];
}
当应用首次启动时,会显示用户位置,数据将被拉出并且一切正常。如果您等待大约15秒并且不移动,则用户位置图标将变为灰色(请参见图像),任何更新都会导致失败。如果我重新加载视图它再次工作,但同样的事情发生。
我没有使用CLLocationManager,因为我不需要不断地在用户附近提取数据。只需每隔一段时间或按需用户。
我还注意到,如果我等待足够长的时间,用户位置再次变为蓝色,所有这些似乎都有效。导致此超时的原因是什么?我可以设置此超时,还是只需要使用CLLocationManager来控制它? Parse只是使用内部CLLocationManager或其他东西超时吗?
感谢您的帮助!
答案 0 :(得分:0)
当你使用Parse函数时显而易见:geoPointForCurrentLocationInBackground
Parse将接管它自己的内部CLLocationManager。在它完成初始化之后它会停止更新位置(或者如果用户移动得足够的话,可能只更新用户位置..再次猜测一下......如果设备支持该功能)。
解决方案是在视图控制器中创建自己的CLLocationManager,而不是调用
geoPointForCurrentLocationInBackground
您只需存储更新的用户位置并致电:
PFGeoPoint *usersGeoPoint = [PFGeoPoint geoPointWithLocation:usersLastKnownLocation];
现在我们可以使用它来查询数据附近。我们现在负责启动和停止更新用户位置。我强烈建议您使用此帖子来设置自己的LocationManager,并确保向下滚动到更新的答案以获取更多最新信息。 How can I get current location from user in iOS
在阅读了Parse文档中的geoPointWithLocation之后,我做出了上述结论。请自己阅读(我知道它很难找到,只有一行......)