使用Parse.com的MKMapView用户位置超时

时间:2014-12-17 10:26:22

标签: ios parse-platform mkmapview cllocationmanager cllocation

所以我使用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或其他东西超时吗?

感谢您的帮助!

enter image description here

enter image description here

1 个答案:

答案 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之后,我做出了上述结论。请自己阅读(我知道它很难找到,只有一行......)