iOS - 如果用户允许使用他当前的位置

时间:2012-06-05 19:29:29

标签: iphone ios ios5 mapkit cllocationmanager

在我的应用程序的地图视图中,我想显示最近的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中完成所有工作

所以任何人都可以帮助我如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

不是在viewDidLoad部分下进行,而是在此方法中插入代码呢?

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

一旦用户的位置更新,这将使代码运行。 您还可以在方法内添加if语句,以检查代码是否第一次运行以及是否返回。