Как найти текущее местоположение в iPhone? - PullRequest
1 голос
/ 22 марта 2011

Я написал следующий код, чтобы найти текущее местоположение. Он хорошо работает и печатает текущее местоположение, когда я печатаю lat2 и logg2 ниже в NSLOg, но не присваивает значение меткам. Когда я печатаю этикетку, значение равно нулю.

И я хочу получить доступ к значениям lat2 и logg2 вне метода didUpdateToLocation. Я не могу получить доступ к этим значениям вне метода didUpdateToLocation, хотя Я объявил logg2 и lat2 глобально. Вне этого метода он дает нулевое значение. Как я могу это сделать? В чем здесь проблема? Есть ли пример кода или учебник для этого?

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

-(void)awakeFromNib {
    [self update];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    if (wasFound) return;
    wasFound = YES;

    CLLocationCoordinate2D loc = [newLocation coordinate];

    lat2 = [NSString stringWithFormat: @"%f", loc.latitude];
    logg2= [NSString stringWithFormat: @"%f", loc.longitude];
    NSLog(@"latitude is %@",lat2);
    NSLog(@"longitude is  %@",logg2);
    NSLog(@"*******This is the login view controller did update locationmethod of loginview controller.");
    NSLog(@"latitude is %f",[lat2 floatValue]);
    NSLog(@"longitude  is %f",[logg2 floatValue]);
    labellat.text = [NSString stringWithFormat: @"%f", loc.latitude];
    labellog.text= [NSString stringWithFormat: @"%f", loc.longitude];
    //NSLog(@"text of label is %@",labellat.text);
    //NSLog(@"text of label is %@",labellog.text);

    //lat=loc.latitude;
    //log=loc.longitude;
    //altitude.text = [NSString stringWithFormat: @"%f", newLocation.altitude];

    //    NSString *mapUrl = [NSString stringWithFormat: @"http://maps.google.com/maps?q=%f,%f", loc.latitude, loc.longitude];
    //    NSURL *url = [NSURL URLWithString:mapUrl];
    //    [[UIApplication sharedApplication] openURL:url];
}

- (IBAction)update {
    locmanager = [[CLLocationManager alloc] init];
    [locmanager setDelegate:self];
    [locmanager setDesiredAccuracy:kCLLocationAccuracyBest];
    NSLog(@"*********This is the location update method of login view controller.");
    [locmanager startUpdatingLocation];
}

Ответы [ 3 ]

1 голос
/ 22 марта 2011

Базовое управление памятью:

lat2 = [NSString stringWithFormat: @"%f", loc.latitude];
logg2= [NSString stringWithFormat: @"%f", loc.longitude];

Эти строки уничтожаются (освобождаются) почти сразу после их создания. Ознакомьтесь с рекомендациями по управлению памятью. Также не используйте глобалы. Если необходимо, это должно исправить исчезновение ваших строк:

[lat2 release];
[logg2 release];
lat2 = [[NSString stringWithFormat: @"%f", loc.latitude] retain]; // keep string alive until we release it
logg2= [[NSString stringWithFormat: @"%f", loc.longitude] retain];

О, а вы не забыли подключить розетки к вашим меткам в Интерфейсном Разработчике?

0 голосов
/ 22 марта 2011

Используйте это, чтобы показать вашу широту и долготу в метках.

labellat.text = [NSString stringWithFormat: @"%.6f", loc.latitude];

labellog.text= [NSString stringWithFormat: @"%.6f", loc.longitude];

Пожалуйста, сохраните координату местоположения, чтобы получить значения, если вы хотите вызвать ее из любых других мест, в противном случае она может автоматически перезапуститься.

0 голосов
/ 22 марта 2011

Вы можете использовать

labellat.text = [NSString stringWithFormat: @"%@", lat2];
labellog.text= [NSString stringWithFormat: @"%@", logg2];

Но я думаю, что лучше хранить значения широты и долготы в виде переменной с плавающей точкой в ​​переменной экземпляра и, таким образом, легко получить к ней доступ. Если вы хотите показать это в метке, используйте метод stringWithFormat:, как вы это сделали.

UPDATE:

Учебное пособие Здравствуйте! Учебное пособие CoreLocation может помочь вам.

...