Хранение CLLocation (данные широты, долготы) в базовых данных

Я хочу задать вопрос о местоположении ядра и основных данных. Я посмотрел некоторые вопросы, но не смог этого сделать.. У меня есть приложение, которое хранит некоторые текстовые поля, фотографии, данные даты и времени в UITableView. С основными данными я сохранял все (фотографии, тексты, дату и т. д.). Теперь я пытаюсь сохранить данные о местоположении. не мог сделать.

это часть моего кода здесь.

    #pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];

    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    [locationManager startUpdatingLocation];

    NSDateFormatter *myFormatter = [[NSDateFormatter alloc] init];
    [myFormatter setDateFormat:@"MM-dd-yyyy HH:mm"];
    [myFormatter setTimeZone:[NSTimeZone systemTimeZone]];

    todaysDate = [myFormatter stringFromDate:[NSDate date]];
    myDateLabel.text = todaysDate;

    UIView *patternBg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    patternBg.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background01.png"]];
    self.tableView.backgroundView = patternBg;

    // If we are editing an existing picture, then put the details from Core Data into the text fields for displaying

    if (currentPicture)
    {
        [companyNameField setText:[currentPicture companyName]];
        [myDateLabel setText:[currentPicture currentDate]];

        if ([currentPicture photo])
            [imageField setImage:[UIImage imageWithData:[currentPicture photo]]];
    }
}

в кнопке save

    - (IBAction)editSaveButtonPressed:(id)sender
{
    // For both new and existing pictures, fill in the details from the form
    [self.currentPicture setCompanyName:[companyNameField text]];
    [self.currentPicture setCurrentDate:[myDateLabel text]];
    [self.currentPicture setCurrentTime:[myTimeLabel text]];
    [self.currentPicture setLatitudeData:[_latitudeLabel text]];
    [self.currentPicture setLongtidueData:[_longtitudeLabel text]];

}

и последний, мой метод locationManager..

    - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"didUpdateToLocation: %@", newLocation);
    CLLocation *currentLocation = newLocation;

    if (currentLocation != nil) {
        _longtitudeLabel.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude];
        _latitudeLabel.text = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude];
         [self->locationManager stopUpdatingLocation];
    }


}

я попытался "[locationmanager stopUpdatingLocation];" много раз, но когда я вошел в приложение, код начинает вычислять данные широты и долготы, я просто хочу взять эти данные 1 раз и сохранить..

Спасибо!

3 ответа

Пара вещей:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
    if (locationAge > 5) return;  // ignore cached location, we want current loc

    if (newLocation.horizontalAccuracy <= 0) return;  // ignore invalid

    // wait for GPS accuracy (will be < 400)
    if (newLocation.horizontalAccuracy < 400) {
        _longtitudeLabel.text = [NSString stringWithFormat:@"%.8f", newLocation.coordinate.longitude];
        _latitudeLabel.text = [NSString stringWithFormat:@"%.8f", newLocation.coordinate.latitude];
         [manager stopUpdatingLocation];
    }    
}

Если звонит stopUpdatingLocation не останавливает обновления местоположения, тогда скорее всего self->locationManager ноль Это будет означать, что вы на самом деле не делаете звонок.

Трудно точно понять, почему это произошло, за исключением того, что ваш код, похоже, не использует семантику, подразумеваемую @property декларация. Просто присваивая location в viewDidLoad избегает любых объявлений и ищет менеджера, используя self->locationManager так же хорошо. При условии, что location это свойство, вы должны назначить его self.locationManagerи используйте это при поиске.

В вашем didUpdateToLocation сделайте этот код

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

    NSTimeInterval locationAge = - [newLocation.timestamp timeIntervalSinceNow]; if (locationAge> 5) return;

    // игнорируем кэшированное местоположение, нам нужен текущий loc
    if (newLocation.horizontAccuracy <= 0) return; // игнорируем неверный

    // ждем точности GPS (будет < 400) if (newLocation.horizontAccuracy <400) {_longtitudeLabel.text = [NSString stringWithFormat: @ "%. 8f", newLocation.coordinate.longitude]; _latitudeLabel.text = [NSString stringWithFormat: @ "%. 8f", newLocation.coordinate.latitude]; [manager stopUpdatingLocation];

    // присваиваем ноль объекту locationManager и делегируем
    locationManager.delegate = nil;
    locationManager = nil;

    }

}

Благодарю.

Другие вопросы по тегам