0

.m ファイルに次のコードがあります。

コードは、次のタスクを実行することです。

  1. CLLocationManager クラスを初期化する
  2. プロパティの取得 (速度、精度、座標)
  3. これらの値を NSString に変換します
  4. NSLog を使用してこれらの値を画面に記録します
  5. 指定されたラベルに値を設定し、最後に
  6. メソッド「locationUpdate」に含まれるコードをループします。

コードは、これらすべてのプロパティの初期値を提供します。ただし、値はすべてのプロパティで同じです (つまり、2.7188880)。

さらに、メソッド「locationUpdate」をループすると、コードは各プロパティに対して 0 を返します。

コードがプロパティの値を返さない理由を誰か教えてもらえますか?

- (void)viewDidLoad {
    [super viewDidLoad];
    locationManager = [[CLLocationManager alloc] init];

    [locationManager setDelegate:self];

    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];

    [locationManager startUpdatingLocation];

    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 2.0
                                                      target: self
                                                    selector:@selector(locationUpdate)
                                                    userInfo: nil repeats:YES];

    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];


    NSString *spd = [[NSString alloc] initWithFormat:@"%f", speed];

    NSString *crd = [[NSString alloc] initWithFormat:@"%f", coordinates];

    NSString *drc = [[NSString alloc] initWithFormat:@"%f", direction];

    NSString *acc = [[NSString alloc] initWithFormat:@"%f", accuracy];

    NSString *desc = [locationManager description];

    NSLog(@"Speed: %@", spd);
    NSLog(@"Coordinates: %@", crd);
    NSLog(@"Direction: %@", drc);
    NSLog(@"Accuracy: %@", acc);
    NSLog(@"Description: %@", desc);

    Speedometer.text = spd;
    CoordinatesLabel.text = crd;
    DirectionLabel.text = drc;
    AccuracyLabel.text = acc;
    DescriptionLabel.text = desc; 
}


- (void)locationUpdate {

    NSString *desc = [locationManager description];

    NSString *spd = [NSString stringWithFormat:@"%g", speed];
    NSString *crd = [NSString stringWithFormat:@"%g", coordinates];

    NSString *drc = [NSString stringWithFormat:@"%g", direction];

    NSString *acc = [NSString stringWithFormat:@"%g", accuracy];

    NSLog(@"Speed: %@", spd);
    NSLog(@"Coordinates: %@", crd);
    NSLog(@"Direction: %@", drc);
    NSLog(@"Accuracy: %@", acc);

    Speedometer.text = spd;
    CoordinatesLabel.text = crd;
    DirectionLabel.text = drc;
    AccuracyLabel.text = acc;
    DescriptionLabel.text = desc; 
}
4

1 に答える 1

0

タイマーを設定することは想定されていません。ロケーション マネージャーのデリゲート メソッドを実装するだけです。更新がある場合は、通知されます。

あなたの最大の問題は、変数speedcoordinatesdirection、およびの使用accuracyです。それらをどこにも設定することはありません(少なくとも投稿したコードでは)。

locationManager:didUpdateLocations:and/orlocationManager:didUpdateToLocation:fromLocation:メソッドを実装します。これらは更新された位置情報で呼び出されます。speedこれらを使用して、自分や他の ivarを更新します。

編集:もう1つの提案。ユーザーに表示される数値の書式設定に文字列書式を使用しないでください。NSNumberFormatter代わりに使用してください。このようにして、数値はユーザーのロケールに基づいて適切にフォーマットされます。

于 2012-11-02T21:56:43.837 に答える