2011-07-12 4 views
2

私はBig Nerd RanchのiOSプログラミングの第2版を使って作業しています。第4章チャレンジ:見出しに来ました。この演習では、私が混乱していることを示唆しています。私は私がする必要がないと思うことをする必要があると言います。この演習の私の解決策は簡単すぎるようです。ヒント?

この時点まで、本書ではCoreLocationを例にして、委任の概念を説明しました。アプリケーションデリゲートでは、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); 
} 

オクラホマので、章では、これまでのすべてを通して私を歩いていて、すべての作品:以下を参照してください:次のように

- (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ための2つのデリゲートメソッドを実装しましたうまく。今、運動が来る:

「委任を使用して、CLLocationManager から見出し情報を取得し、コンソールにそれを印刷(ヒント:あなたは少なくとも一つのデリゲートメソッドを実装しに別のメッセージを送信する必要があります ロケーションマネージャー) "

ここで私は混乱しています。まず最初に、CLLocationManagerのドキュメントを読んだあと、私がすでに行った2つ以外のデリゲートメソッドは実装されていないように見えます。だから、ヒントが参照できる他のデリゲートメソッドがわからない。私がいないかのようにだから、それは私には思える

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

:didUpdateToLocation::fromLocation:そうのようなすべての

第二に、私が単にlocationManagerの実装を更新することにより、運動を解決できるかのように思えます実際、ロケーションマネージャにそれ以上のメッセージを送信する必要があります(ただし、newLocationにゲッターメッセージを送信する必要がありますが、CLLocationManagerではなくCLLocationです)。

私は明らかに何かを誤解しています。私は解決策を探しているわけではありません---私はこれをうまくやりたいのですが、私が誤解していることについてのヒントを非常に感謝しています。前もって感謝します!

+1

をnewHeading(CLHeading *)これは、Xcodeの4の私のコピーは唯一のMac OS X 10.6コアライブラリのマニュアルを持っていないことが判明iOS 4.3ライブラリドキュメント。これはなぜ "見出し"へのすべての参照が欠けていたのかを説明し、適切な委任方法を見つけることができませんでした。私は適切なドキュメントをダウンロードしました。ドキュメントが完成したことを当然のこととして理解すると、何が起こるのか分かります。答えたすべての人に感謝します! –

答えて

2

私は彼らにあなたにコンパス(磁気)見出しを求めると思います。

CLLocationManagerドキュメントをもう一度見直してください。デバイスからコンパスの見出しを取得するには、-startUpdatingHeadingメソッドと-stopUpdatingHeadingメソッドとそれに対応するデリゲートメソッドがあります。

希望に役立ちます。

+0

私のXcode 4のドキュメントがlocationManager:didUpdateHeading:メソッドを参照していないと思われますか?しかし、私がオンラインで検索すると、それがあります!ありがとう、それは私が必要としていたものです。 –

0

私の意見では、このエクササイズは最初から行われることを意図しています。この章でこれまでに学んだ内容に依存していますが、この章で提供されているコードは拡張していません。したがって、メソッドを数えるときは、最初から始めてください。

0

CLLocationManagerDelegateのドキュメントを見ると、実装できる方法は2つ以上あります。 :)

フィロズ氏によると、移動方向とあなたの見出しには違いがあります。

一方向に進むことはできますが、それでも他の方向を見ることはできます。 CLLocationDirectionここにあなたが行っている場所が表示されますが、あなたが探しているものではありません!

詳細な説明があるCLLocationManagerのドキュメントの概要の冒頭を見ることができます。

0
  • (無効)locationManager:(CLLocationManager *)マネージャー didUpdateHeading:
関連する問題