摆脱didUpdateToLocation中的缓存数据

时间:2010-10-04 15:17:50

标签: iphone objective-c cocoa-touch gps core-location

我正试图在iPhone模拟器上获得实际位置。但我总是得到缓存的结果。我的问题与thisthis question有关。我正在使用LocateMe示例中的代码:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
     NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
    if (locationAge > 5.0) return;
    if (newLocation.horizontalAccuracy < 0) return;
    if (bestEffortAtLocation == nil || bestEffortAtLocation.horizontalAccuracy > newLocation.horizontalAccuracy) {
        self.bestEffortAtLocation = newLocation;
        if (newLocation.horizontalAccuracy <= locationManager.desiredAccuracy) {

            [locationManager stopUpdatingLocation];
            locationManager.delegate = nil;

            latitude = newLocation.coordinate.latitude;
            longitude = newLocation.coordinate.longitude;
        }
    }
}

但这似乎不正常:

if (locationAge > 5.0) return;

如果GPS坐标超过5秒,则该方法将返回。但在我的情况下(iPhone模拟器),该方法只被调用一次。因此退出该方法不是一个好主意。如果我在方法的开头提取位置,我会得到缓存结果。在上面的代码示例中,我永远不会得到一个坐标。

我错过了什么?

修改1:

iPod touch上的一切正常。

编辑2:

如何强制locationManager更新其位置? distanceFilter设置为kCLDistanceFilterNone,但它没有检测到位置变化了几公里。

我如何知道位置数据准备好了?例如。位置更新每10秒钟一次,我是否需要暂停?因为我的应用程序立即获取现有值,并且不等待位置管理器准备就绪。

编辑3:

大约一分钟后我得到

  

错误:无法完成操作。 (kCLErrorDomain错误0。)

我启用了wifi,iPod touch和MacBook Pro在同一个SSID中。我做错了什么?

编辑4:

似乎是Xcode 3.2.4和iOS 4.1的问题。另见here。我并不孤单:CLLocationManager on iPhone Simulator fails with kCLErrorDomain Code=0(Google上有更多结果)

编辑5:

在iOS 4中,Apple使用自己的数据库进行地理定位。但我不明白为什么iPod和MBP之间存在差异。

编辑6:

本地化在iPad上也不起作用。有人提出解决方案吗?

0 个答案:

没有答案