2011-07-12 71 views
2

我正在通過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)。

所以我很明顯誤解了一些東西。我不是在尋找解決方案---我確實想要解決這個問題---但是我非常感謝提示我誤解了什麼。提前致謝!

+1

事實證明,我的Xcode 4的副本只有在Mac OS X 10.6的核心庫文件,而不是iOS 4.3庫文檔。這就解釋了爲什麼所有對「標題」的引用丟失了,所以我找不到合適的委託方法。我已經下載了相應的文檔,現在我知道當您認爲文檔已完成時會發生什麼情況。感謝所有回答! –

回答

2

我認爲他們要求你獲得指南針(磁性)標題。

再次回顧CLLocationManager文檔。有-startUpdatingHeading和-stopUpdatingHeading方法和相應的委託方法從設備獲取指南針標題。

希望有所幫助。

+0

您能否相信我的Xcode 4副本中的文檔沒有引用locationManager:didUpdateHeading:方法?但是,如果我在網上搜索,那就是!謝謝,那正是我需要的。 –

0

在我看來,這個練習是從頭開始的。你依賴於本章到目前爲止學到的內容,但是你沒有擴展本章提供的代碼。所以,當你計算方法時,你從頭開始,一切都會匹配...

0

如果你看看CLLocationManagerDelegate文檔,有兩種以上的方法可以實現! :)

而Firoze說,移動方向和你的方向是有區別的。

你可以走一條路,但仍然看另一個方向。 CLLocationDirection這裏代表你要去的地方,但這不是你要找的!

您可以在CLLocationManager文檔中查看概述的開頭部分,這裏有一個很好的解釋。

0
  • (無效)的LocationManager:(CLLocationManager *)經理 didUpdateHeading:(CLHeading *)newHeading