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 回答