Хранение 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;}
}
Благодарю.