我正在通过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)
所以我显然误解了一些事情。我不是在寻找解决方案 - 我确实希望通过这个方法来解决这个问题 - 但我非常感谢我对我误解的一些暗示。提前谢谢!
答案 0 :(得分:2)
我认为他们要求你获得指南针(磁性)标题。
再次回顾CLLocationManager文档。有-startUpdatingHeading和-stopUpdatingHeading方法以及相应的委托方法来从设备获取指南针。
希望有所帮助。
答案 1 :(得分:0)
在我看来,这项练习是从头开始的。您依赖于本章到目前为止所学到的知识,但您并未扩展本章中提供的代码。所以,当你计算方法时,你从头开始,一切都会匹配......
答案 2 :(得分:0)
如果查看CLLocationManagerDelegate文档,可以实现两种以上的方法! :)
正如Firoze所说,运动方向和你的方向之间存在差异。
你可以走一条路,但仍然看另一个方向。 CLLocationDirection
在这里代表你要去的地方,但这不是你想要的!
您可以在CLLocationManager文档中查看概述的开头,其中有一个很好的解释。
答案 3 :(得分:0)