1

因此,当设备移动 50 米或更多时,我需要使用新位置更新我的代表。这是我正在学习的一本书中章节测验的一部分。

这是我的代码:

- (id)initWithCoder:(NSCoder *)aDecoder //we're overriding the superclasses (UIViewController) initialiser
{

    self = [super initWithCoder:aDecoder];

    if (self){
        //create location manager object
        locationManager = [[CLLocationManager alloc] init];

        //there will be a warning from this line of code
        [locationManager setDelegate:self];

        //and we want it to be as accurate as possible
        //regardless of how much time/power it takes
        [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

        //set the amount of metres travelled before location update is made
        [locationManager setDistanceFilter:50];

        //tell our manager to start looking for its location immediately
        [locationManager startMonitoringSignificantLocationChanges];

    }

    return self;
}

- (void)locationManager:(CLLocationManager *)manager
    didUpdateLocations:(NSArray *)locations
{
    NSLog(@"%@", [locations lastObject]);
}

我已将距离过滤器设置为 50(我希望对应于 50 米)。然后当打印到控制台时,我调用了数组中的最后一个对象,我希望它是最近更新的位置。

然后我构建并运行并将初始位置打印到控制台。然后我点击debug > location > city run我的 iOS 模拟器菜单。我想这需要超过 50 米的位置,因为城市跑步肯定会超过 50 米。位置再次更新。我尝试通过单击高速公路驱动器再次更新位置,但没有任何反应。

在文档中它指出:“它不依赖 distanceFilter 属性中的值来生成事件。连续多次调用此方法不会自动导致生成新事件

这正是我正在经历的。我可以更改一次位置并将新位置打印到控制台。但是再次更改位置不会导致任何更改。

我认为-locationManager:didUpdateLocations:每次更新时更新控制台都会显示新位置。我需要以其他方式执行此操作吗?

希望你能帮助亲切的问候

4

1 回答 1

1

你忘了打电话:startUpdatingLocation像这样:

if ([CLLocationManager locationServicesEnabled]) {
    [self.locationManager startUpdatingLocation];
}
于 2013-10-20T15:49:31.900 回答