我正在通過Big Nerd Ranch的iOS編程,第二版,我已經到了第4章挑戰:標題。這個練習提供了一個暗示,我很困惑;它說我需要做我認爲我不需要做的事情。我對這個練習的解決方案似乎太簡單了;提示?
直到本章的這一點,本書都以CoreLocation爲例介紹了委託的概念。在應用程序委託中,我添加了一個CLLocationManager實例變量並將其委託設置爲應用程序委託。請看下圖:
- (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);
}
所以,在我看來,好像我不,實際上,需要發送更多的消息到位置管理器(儘管我確實需要發送getter消息到newLocation;但這是一個CLLocation,而不是CLLocationManager)。
所以我很明顯誤解了一些東西。我不是在尋找解決方案---我確實想要解決這個問題---但是我非常感謝提示我誤解了什麼。提前致謝!
事實證明,我的Xcode 4的副本只有在Mac OS X 10.6的核心庫文件,而不是iOS 4.3庫文檔。這就解釋了爲什麼所有對「標題」的引用丟失了,所以我找不到合適的委託方法。我已經下載了相應的文檔,現在我知道當您認爲文檔已完成時會發生什麼情況。感謝所有回答! –