2013-02-21 81 views
-1

我在实现类位置时遇到了一些问题。 当我启动应用程序时,我调用StartApp.m中的类位置,我想要打印以测试变量cidade,但是在NSLog中Cidade2和Cidade3的结果为null,我做的事情太错了?我尝试更改代码,但我无法解决问题。其他我不明白的是为什么NSLog Cidade2打印nil,变量也是Location类。 Tks求助!涉及CLLocationManager的类实现

输出:

2013-02-20 21:58:09.648 MPA[484:11603] Cidade 2: (null) 
2013-02-20 21:58:09.650 MPA[484:11603] Cidade 3 : (null) 
2013-02-20 21:58:09.661 MPA[484:11603] Resolving the Address 
2013-02-20 21:58:10.390 MPA[484:11603] Found placemarks: (
    "Apple Store, San Francisco, Apple Store, San Francisco, 1800 Ellis St, San Francisco, CA 94115-4004, United States @ <+37.78584540,-122.40651750> +/- 100.00m, region (identifier <+37.78584545,-122.40652160> radius 18.96) <+37.78584545,-122.40652160> radius 18.96m" 
), error: (null) 
2013-02-20 21:58:10.391 MPA[484:11603] Cidade : California 

Localizacao.m

#import "Localizacao.h" 

@interface Localizacao() 

@end 

@implementation Localizacao 


@synthesize cidade,estado,latSend,lonSend; 

-(void)startLocalizacao 
{ 

    lm = [[CLLocationManager alloc] init]; 
    lm.delegate = self; 
    lm.desiredAccuracy = kCLLocationAccuracyBest; 
    lm.distanceFilter = kCLDistanceFilterNone; 
    [lm startUpdatingLocation]; 
    geocoder = [[CLGeocoder alloc]init]; 

    NSLog(@"Cidade 2: %@", cidade); 


} 

//Adicionado para pegar a localizacao atual 

-(void) locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation { 

    //Display Latitude 
    latSend = newLocation.coordinate.latitude; 


    //Display Longitude 

    lonSend = newLocation.coordinate.longitude ; 


    //Display Accurancy 

    NSString *acc = [[ NSString alloc ] initWithFormat:@"%f", 
        newLocation.horizontalAccuracy]; 

    //Update MAP 
    MKCoordinateSpan span; 
    span.latitudeDelta = .001; 
    span.longitudeDelta= .001; 


    MKCoordinateRegion region; 
    region.center = newLocation.coordinate; 
    region.span = span; 



    [acc release]; 


    NSLog(@"Resolving the Address"); 
    [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) { 
     NSLog(@"Found placemarks: %@, error: %@", placemarks, error); 
     if (error == nil && [placemarks count] > 0) { 
      placemark = [placemarks lastObject]; 



      /*NSString *teste = [[NSString alloc ] initWithFormat:@"%@ %@\n%@ %@\n%@\n%@", 
      placemark.subThoroughfare, 
      placemark.thoroughfare, 
      placemark.postalCode, 
      placemark.locality, 
      placemark.administrativeArea, 
      placemark.country];*/ 

      cidade = placemark.administrativeArea; 
      estado = placemark.locality; 

      [lm stopUpdatingLocation]; 

      NSLog(@"Cidade : %@", cidade); 

     } else { 
      NSLog(@"%@", error.debugDescription); 
     } 
    } ]; 


} 

@end 

StartApp.m

#import "StartApp.h" 
#import "Localizacao.h" 

@interface StartApp() 

@end 

@implementation StartApp 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    Localizacao *localizacao = [[Localizacao alloc] init]; 

    [localizacao startLocalizacao]; 

    NSLog(@"Cidade3 : %@", localizacao.cidade); 


    // Do any additional setup after loading the view from its nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

韩国社交协会的帮助我

回答

2

您创建您的Localizacao实例,然后致电startLocalizacaostartLocalizacao方法设置位置管理器并要求它启动。然后它记录Cidade 2。此日志发生在位置管理器完成初始化之前以及应用程序收到第一个位置之前。所有这些初始化都由位置管理器在后台完成。

您没有做错任何事情(除了为尚未初始化的数据添加日志语句外)。你只需要认识到位置事件是异步的,当它们可用时就会发生。

+0

Tks rmaddy更新。我没有很多异步和线程技能。我如何等待位置经理完成在localizacao.cidade中给出一个值?我正在寻找dispatch_async是否正确? Tks – Cauca 2013-02-21 03:05:37

+0

朋友,你能帮我解答这个问题吗?我无法运行我的代码 – Cauca 2013-03-08 16:39:02