Это зависит от ОС. Если ваша ОС понимает, вы можете просто отправить ее UTF-8.
То, что вы делаете, прекрасно. Вы должны сохранить широту и долготу как удвоившиеся в Core Data. Когда вам нужно снова получить информацию, верните двойники из Core Data и создайте структуру CLLocationCoordinate2D
с функцией, подобной CLLocationCoordinate2DMake
. Нет встроенного способа хранения местоположения, поэтому хранение компонентов широты и долготы в порядке.
Если вы не выполняете математические операции по широте или долготе (поиск ограничивающих полей и т. Д.), Вы можете сохранить их как строки. Поплавки и удвоения могут слегка изменить свои значения, что приведет к сбоям сравнения.
Вы можете сделать это очень просто, установив тип атрибута Core Data на Transformable
. Трансформатор по умолчанию, если вы оставите пустое значение Value Transformer Name пустым NSKeyedArchiver
, который работает с большинством типов Foundation, таких как NSURL и CLLocation.
Вам не нужно использовать NSNumber для хранения точек широты и долготы. Вместо этого вы можете хранить CLLocation непосредственно в основных данных.
Настройте сущность для каждого CLLocation, это будет слишком много отношений, независимо от того, какой объект использует точки местоположения. Давайте назовем это LocationPoint:
class LocationPoint: NSManagedObject {
@NSManaged var game: NSNumber
@NSManaged var time: NSDate
@NSManaged var location: AnyObject
}
Затем вы установите свойство location для преобразования в модель данных Xcode. Вот и все!
В Objective-c вы действительно можете объявить это свойство LocationPoint как CLLocation без каких-либо ошибок:
@property (nonatomic, strong) CLLocation *location
«Лучший» способ сохранить его зависит от того, что вы хотите с ним делать:
кучу дополнительных свойств, которые вы можете сохранить / восстановить, если вы сделаете это вручную (высота, горизонтальная точность, вертикальная точность, метка времени). Есть еще кое-что, что вы не можете (скорость, заголовок); CLLocation не предоставляет подходящий init-метод, и свойства доступны только для чтения.
Все дополнительные свойства полезны, если вы записываете дорожку. Высота важна, если вы записываете POI на горной местности («нам еще нужно подняться на 100 м»). горизонтальная / вертикальная точность может использоваться для представления того, насколько велика POI (например, город может иметь «горизонтальную точность» в несколько километров и отображаться как большой круг).
CLLocation реализует протокол NSCoding, поэтому вы можете хранить их в Core Data в качестве преобразуемых атрибутов. Вы можете использовать стандартный трансформатор значений NSKeyedUnarchiveFromData.
Вы просто передали бы объект CCLocation в атрибут управляемого объекта, и он сериализовал его на данные и сохранил бы его как blob в хранилище SQL. Когда вам понадобится объект местоположения, он автоматически изменит процесс и вернет вам полностью заполненный объект CCLocation.
Это может быть самый простой способ получить то, что вы хотите.