iPhone CLLocation Simulator didUpdateToLocation从未调用过

时间:2011-02-22 06:20:26

标签: iphone ios4

我知道iPhone模拟器默认为美国某个地方,但这是否意味着永远不会调用didUpdateToLocation?所有被调用的都是didFailWithError,经过很长一段时间也是如此。这个方法的超时时间是多少?

P.S。 Android在这方面要好得多,让你伪造位置。

5 个答案:

答案 0 :(得分:6)

如果你正在使用iPhone simulator,那么这是didUpdateToLocation永远不会调用,因为在模拟器的情况下无法进行位置更新,我在我的一个应用程序中遇到了相同的情况(模拟器测试)变得困难),所以我在didFailWithError方法本身中定制了模拟器的经度和纬度。如下所示

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError*)error{
if( [(NSString *)[[UIDevice currentDevice] model] isEqualToString:@"iPhone Simulator"] ){

        lat = 50.748129f;
        log = -2.970836f;

        return;
    }
[[LocationManager sharedManager].locationManager stopUpdatingLocation];
    [LocationManager sharedManager].isUpdating = NO;
}

现在,您可以使用此位置测试您的应用,就像设备搜索当前位置时一样。

希望你得到我想说的话

祝你好运!

答案 1 :(得分:3)

您也可以在模拟器中获得didUpdateToLocation更新。

  • 但是,您必须将代码包含在具有活动运行循环的线程中,例如 作为您的应用程序的主线程。这具有GPS有时间的优点 在用户点击您的APP时进行更新。 :)
  • 配置模拟器(在5.1上测试) 您可以配置模拟器(Debug> Location),例如与你自己的 地点。访问GoogleMaps。 提示:关闭模拟器以应用最后的更改!

我在主循环的viewDidLoad中添加了这个:

    self.locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [locationManager startUpdatingLocation];

结果的结果:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation {
       // Display location in Log
       NSLog(@"Lat= %s Lon=%f", newLocation.coordinate.latitude,
             newLocation.coordinate.longitude);
       // Stop updating, when one is enough
       [locationManager stopUpdatingLocation];
}

希望这有帮助。

答案 2 :(得分:1)

您无法在iphone模拟器上获取位置更新。

答案 3 :(得分:1)

iOS 5现在将位置作为模拟器中的可修改参数。在Simulator中,选择菜单Debug - >位置,并选择其中一个静态或动态位置路线。

Xcode调试器还允许您更改位置 - 查找播放/暂停/步骤按钮旁边的小位置箭头,以便在Xcode中从右侧更改位置。

答案 4 :(得分:1)

我发现在模拟器上没有调用 didUpdateLocations 这是一个奇怪的错误。如果您正在使用自定义位置(就像我一样),在启动模拟器的新实例后,iOS将无法返回自定义位置,直到您执行此操作:

选择“Apple”作为您的位置: 调试 - >位置 - >苹果

然后切换回您的自定义位置: 调试 - >位置 - >自定义位置