1

私はobjective-cに非常に慣れておらず、答えを見つけるためにいくつかの情報源を試しました。今のところ運がない。私を助けてください。

ロケーション機能を備えたアプリを作成しています。アプリは、指定された距離がカバーされたときにアラートを出す必要があります。したがって、最初の場所を保存する必要があります。移動するときは、実際の位置と距離も表示する必要があります。

私がしたことは次のとおりです。

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
//display latitude
NSString *lat =[[NSString alloc]initWithFormat:@"%f",
                 newLocation.coordinate.latitude];
latitude.text=lat;
//latr = lat;

//display longitude
NSString *lon = [[NSString alloc]initWithFormat:@"%f",
                 newLocation.coordinate.longitude];
longitude.text=lon;
//longr = lon;

//display accuracy
//NSString *acc = [[NSString alloc]initWithFormat:@"%f",
//                 newLocation.horizontalAccuracy];
//accuracy.text=acc;
    }


-(void)recordLocation{

double valueLat = [[latitude text]doubleValue];
int latSeconds = valueLat * 3600;
int latDegrees = latSeconds / 3600;
latSeconds = abs(latSeconds % 3600);
int latMinutes = latSeconds / 60;
latSeconds %= 60;

char latChar = (latitude > 0) ? 'N' : 'S';

double valueLon = [[longitude text]doubleValue];
int lonSeconds = valueLon * 3600;
int lonDegrees = lonSeconds / 3600;
lonSeconds = abs(lonSeconds % 3600);
int lonMinutes = lonSeconds / 60;
lonSeconds %= 60;

char lonChar = (longitude > 0) ? 'E' : 'W';

CLLocation *tempPos = [[CLLocation alloc] initWithLatitude:valueLat longitude:valueLon];

NSString *recPosition = [[NSString alloc]initWithFormat:@"%i° %i' %i\" %c" "   " @"%i° %i' %i\"  %c \n", latDegrees, latMinutes, latSeconds, latChar,lonDegrees, lonMinutes, lonSeconds, lonChar];

_labelDegrees.text = recPosition;

NSLog(@"%f" , valueLat);
NSLog(@"%f" , valueLon);
NSLog (@"%@", tempPos);

[self distanceFromLocation:tempPos];

}

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)tempPos{

double lat1 = [[latitude text] doubleValue];
double lon1 = [[longitude text] doubleValue];

CLLocation *currentLocation = [[CLLocation alloc] initWithLatitude:lat1 longitude:lon1];

CLLocationDistance locDistance = [currentLocation distanceFromLocation:tempPos];

NSString *distText = [[NSString alloc]initWithFormat:@"%f", locDistance];

NSLog(@"%@", currentLocation);
NSLog(@"%f", locDistance);
NSLog(@"%@", distText);

[lonDistance setText:distText];
}

動作しますが、インターフェイスのボタンをクリックすると1回だけです。locDistanceの自動更新はありません。初期位置は自動的に更新され(インターネット上にあります)、この位置の記録も問題ありません。私のコードの何が問題になっていますか。単純な問題である可能性がありますが、解決策を見つけることができません。

(私の貧弱な英語を許してください、私はオランダ語です)

よろしくお願いします

よろしく、

アドリ

4

1 に答える 1

0

didUpdateToLocation:fromLocation:メソッド内からrecordLocationを呼び出す必要があります。このメソッドは、ロケーションマネージャで設定できるdistanceFilter距離を超えてロケーションが変更されるたびに、ロケーションマネージャによって自動的に呼び出されます。呼び出されたら、recordLocationを呼び出し、次にdistanceFromLocationを呼び出します。

locationManager:didUpdateToLocation:fromLocation:はiOS 6で減価償却されるため、そのiOSを使用している場合は、locationManager:didUpdateLocations:を使用する必要があります。

于 2013-01-21T23:23:55.580 に答える