0

アプリのマップ ビューで、ユーザーの現在地に最も近い 10 店舗を表示したい

しかし、最初に現在の場所を取得する必要があり、次にユーザーの場所に応じて店舗を表示できます

アプリの最初の起動時に、アプリはユーザーに現在の場所の取得を許可するかどうかを尋ねるので、次のようなことをしなければなりません

ユーザーがマップ上のリストストアを許可する場合、そうでない場合はメインページに戻ります

今、私は以下のコードを使用しています:

 mtMap.showsUserLocation=YES;
mymanager=[[CLLocationManager alloc] init];
mymanager.delegate=self;
CLLocation *location = [mymanager location];
CLLocationCoordinate2D coordinate2 = [location coordinate];

NSString *latitude1 = [NSString stringWithFormat:@"%f", coordinate2.latitude]; 
NSString *longitude1 = [NSString stringWithFormat:@"%f", coordinate2.longitude];

NSString *myURL = [[NSString alloc] initWithFormat:@"http://www.xxxx.com/xxxx/aaaaa.ashx?term=%@,%@",latitude1,longitude1];
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:myURL]];
NSInputStream *dataStream=[[NSInputStream alloc]initWithData:data];

[dataStream open];
if(dataStream)
{

    NSError *err=nil;
    id jsonobject=[NSJSONSerialization JSONObjectWithStream:dataStream options:NSJSONReadingAllowFragments error:&err];
    if([jsonobject respondsToSelector:@selector(objectForKey:)])
    {
        //fill arr
    }
}

しかし、ユーザーがアプリを開いたときに初めて機能しません現在の場所の許可または取得が遅れたため、彼の場所に到達できないため、最寄りの場所を表示できません

私のロジックに問題がある可能性があります。つまり、viewDidload ですべての作業を行うべきではないということです。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

viewDidLoad セクションの下で行う代わりに、このメソッドにコードを挿入するのはどうですか?

// Delegate method from the CLLocationManagerDelegate protocol. 
- (void)locationManager:(CLLocationManager *)manager 
didUpdateToLocation:(CLLocation *)newLocation 
fromLocation:(CLLocation *)oldLocation 
{ 
CLLocation *location = newLocation;
...

これにより、ユーザーの場所が更新されるとコードが実行されます。メソッド内に if ステートメントを追加して、コードが初めて実行されたかどうかを確認し、そうでない場合は返すこともできます。

于 2012-06-06T03:00:22.577 に答える