3

私のアプリはシミュレーターで完全に動作し、すべて正常に動作します。しかし今、iPhone でテストしたいと思っていたのですが、GPS 機能が動作しないことがわかりました。

これが私のコードです。

    [super viewDidLoad];

    //eigener Standort
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
    [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
    eigLat = newLocation.coordinate.latitude;
    eigLon = newLocation.coordinate.longitude;

    eigLatString = [NSString stringWithFormat:@"%f", eigLat];
    eigLonString = [NSString stringWithFormat:@"%f", eigLon];
}

そして今まではすべて順調です。NSLog を使用すると、正しい座標が得られます。

しかし、ここで自分の座標を使用したい:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;

    news = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:NULL];

    for (x=0; x<[news count]; x++)
    {
        //Berechnung der Entfernung
        erdradius = 6371.1;

        //Koordinaten von Datenbank in String schreiben
        NSString *latitude = [[news objectAtIndex:x] objectForKey:@"Latitude"];
        NSString *longitude = [[news objectAtIndex:x] objectForKey:@"Longitude"];

        entfernung = 0;
        double lat1 = eigLat;                   //eigener Standort Latitude
        double long1 = eigLon;                  //eigener Standort Longitude
        double lat2 = [latitude doubleValue];   //Standort Heurigen Latitude
        double long2 = [longitude doubleValue]; //Standort Heurigen Longitude

そして、lat1とlat2で毎回0になります。ただし、iPhone でアプリを実行した場合に限ります。シミュレーターでは問題なく動作します。

なぜこれができるのか誰かが知っていますか?

4

1 に答える 1

1

問題は、現実世界でまだ GPS 位置を取得していないため、メソッドconnectionDidFinishLoading()が呼び出される前didUpdateToLocation()に呼び出されることです。
そのため eighValue はまだ 0 です。

最初に有効な緯度と経度を確認してください。
両方が 0 の場合は、場所を取得していません。

プログラムコードのロジックを変更する必要があると思います

1) 位置を取得するまで待ってから
、GPS 座標を取得した後に connectionDidFinishLoading が呼び出されるように接続を開始します。

または 2) ネットワーク接続の座標結果を保存し、最初の座標をいつ取得したかを計算します。

于 2013-03-19T21:59:39.803 に答える