我对这个练习的解决方案似乎太容易了;提示?

时间:2011-07-12 14:39:26

标签: ios

我正在通过Big Nerd Ranch的 iOS编程,第2版,我来到了第4章挑战:标题。这次演习暗示我发现令人困惑;它说我需要做一些我认为不需要做的事情。

到本章的这一点,本书以CoreLocation为例,向我介绍了委托的概念。在app委托中,我添加了一个CLLocationManager实例变量,并将其委托设置为app委托。见下文:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    locationManager = [[CLLocationManager alloc] init];

    [locationManager setDelegate:self];

    [locationManager setDistanceFilter:kCLDistanceFilterNone];
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    [locationManager startUpdatingLocation];

    [self.window makeKeyAndVisible];
    return YES;
}

我还为CLLocationManager实现了两个委托方法,如下所示:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"%@", newLocation);
}

- (void)locationManager:(CLLocationManager *)manager
       didFailWithError:(NSError *)error
{
    NSLog(@"Could not find location: %@", error);
}

好的,所以到目前为止,本章已经介绍了所有这些,一切都很顺利。现在进行练习:

  

“使用委托,从中检索标题信息    CLLocationManager 并将其打印到控制台。 (提示:您需要实现至少一个委托方法并向其发送另一条消息   位置经理。)“

这是我困惑的地方。首先,在阅读CLLocationManager文档之后,看起来好像除了我已经完成的两个方法之外没有要实现的委托方法。所以我不知道提示可能引用的其他委托方法。

其次,似乎只需通过更新locationManager的实现来解决练习:didUpdateToLocation:fromLocation:就像这样:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"%@", newLocation);
    // Updated code below
    CLLocationDirection heading = [newLocation course];
    NSLog(@"Heading: %f", heading);
}

所以在我看来好像我没有,实际上需要向位置管理器发送更多消息(虽然我确实需要向newLocation发送一个getter消息;但那是一个CLLocation,而不是一个CLLocationManager)

所以我显然误解了一些事情。我不是在寻找解决方案 - 我确实希望通过这个方法来解决这个问题 - 但我非常感谢我对我误解的一些暗示。提前谢谢!

4 个答案:

答案 0 :(得分:2)

我认为他们要求你获得指南针(磁性)标题。

再次回顾CLLocationManager文档。有-startUpdatingHeading和-stopUpdatingHeading方法以及相应的委托方法来从设备获取指南针。

希望有所帮助。

答案 1 :(得分:0)

在我看来,这项练习是从头开始的。您依赖于本章到目前为止所学到的知识,但您并未扩展本章中提供的代码。所以,当你计算方法时,你从头开始,一切都会匹配......

答案 2 :(得分:0)

如果查看CLLocationManagerDelegate文档,可以实现两种以上的方法! :)

正如Firoze所说,运动方向和你的方向之间存在差异。

你可以走一条路,但仍然看另一个方向。 CLLocationDirection在这里代表你要去的地方,但这不是你想要的!

您可以在CLLocationManager文档中查看概述的开头,其中有一个很好的解释。

答案 3 :(得分:0)

  • (void)locationManager:(CLLocationManager *)manager     didUpdateHeading:(CLHeading *)newHeading