Если все, что вы хотите сохранить, это только координаты, то я думаю, что NSUserDefaults
было бы самым простым решением для реализации.Есть несколько разных подходов, которые будут работать, вот тот, который хранит все координаты в виде строки, разделенной ;
для пар координат и ,
между долготой и широтой.
- (void)saveCoordinate:(CLLocationCoordinate2D)coordinate {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *previousCoordinatesString = [defaults objectForKey:@"previousCoordinates"];
NSString *newCoordinatesString;
// check to see if the string has ever been saved for that key
if (previousCoordinatesString) {
newCoordinatesString = [NSString stringWithFormat:@"%@;%f,%f", previousCoordinatesString, coordinate.latitude, coordinate.longitude];
}
else {
newCoordinatesString = [NSString stringWithFormat:@"%f,%f", coordinate.latitude, coordinate.longitude];
}
[defaults setObject:newCoordinatesString forKey:@"previousCoordinates"];
}
Для выборкикоординаты, которые были сохранены, извлекают строку из NSUserDefaults
и затем анализируют каждую пару координат.Если в пользовательских настройках по умолчанию ничего нет, верните NO
.После анализа каждой координаты отправьте ее на сервер.Если устройство не в сети, сохраните строку на потом.
- (BOOL)fetchCoordinates {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *previousCoordinatesString = [defaults objectForKey:@"previousCoordinates"];
// check to make sure the string exists
if (!previousCoordinatesString) return NO;
NSArray *coordinateStringsArray = [previousCoordinatesString componentsSeparatedByString:@";"];
NSMutableString *coordinatesToSave = [[NSMutableString alloc] init];
for (NSString *coordinateString in coordinateStringsArray) {
NSArray *coordinatesArray = [coordinateString componentsSeparatedByString:@","];
if (coordinatesArray.count > 1) {
float lattitude = [[coordinatesArray objectAtIndex:0] floatValue];
float longitude = [[coordinatesArray objectAtIndex:1] floatValue];
CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(lattitude, longitude);
if (![self sendCoordinatesToServer:coordinate]) {
[coordinatesToSave appendFormat:@";%f,%f", lattitude, longitude];
}
}
}
if (coordinatesToSave.length > 0) {
[defaults setObject:coordinatesToSave forKey:@"previousCoordinates"];
return YES;
}
return NO;
}
- (BOOL)sendCoordinatesToServer:(CLLocationCoordinate2D)coordinate {
if (/*check for network connection*/) {
// send to server
return YES;
}
return NO;
}
Причина разрыва каждой координаты и попытки отправить ее отдельно заключается в том, что она может быть обработана и адаптирована к вашим конкретным потребностям, но если весь набор координат можно отправить в виде строки втогда это будет гораздо лучший вариант с точки зрения мобильных устройств.