将核心数据行从一个表(实体)映射到 [CLLocation] 数组?
Posted
技术标签:
【中文标题】将核心数据行从一个表(实体)映射到 [CLLocation] 数组?【英文标题】:Map core data row from one table (entity) to an array of [CLLocation]? 【发布时间】:2016-10-26 09:41:26 【问题描述】:在我的 ios 应用程序中,我使用的是核心数据,我需要在一个表中保存一个我将从 JSON 获得的“区域”数组。
“区域”对象的模型非常简单:
class Region : NSObject, NSCoding
...
//MARK: -
//MARK: - Properties
fileprivate var id: String
fileprivate var name: String
fileprivate var boundaryPoints: [CLLocation]
fileprivate var midCoordinate: CLLocationCoordinate2D
return getPolygonFromBoundaryPoints().coordinate
init(id: String, name: String, boundaryPoints: [CLLocation])
self.id = id
self.name = name
self.boundaryPoints = boundaryPoints
super.init()
//MARK: -
//MARK: - NSCoding
...
//MARK: -
//MARK: - Getters and Setters
...
问题是我需要将它保存在一个记录如下的表中:
区域表:
标识 |标题 | [CLLocation]
在存储有关“区域”对象的信息时,将行映射到 (lat,lng) 点数组(在本例中为 [CLLocation])的最佳解决方案是什么?因为“区域”对象模型包含一个边界点数组。
换句话说,我应该如何使用 Core data 将具有数组属性的对象模型保存到 sql 中? (对表格的结构和关系感兴趣)
【问题讨论】:
您将需要一个相关实体来存储您的 CLLocation 纬度和经度值,并在您的区域和位置之间使用一对多的关系 【参考方案1】:您需要将核心数据中的值存储为Transformable
并使用值转换器。你可以在这里找到更详细的教程:http://lextech.com/2013/01/core-data-transformable-attributes/
【讨论】:
感谢您分享此内容。是否有任何性能/开销问题不使用此方法并使用 Paulw11 提到的方法?如果我必须在 Region 实体中本地存储数千条记录?请指教,我是核心数据的初学者。 Paulw11 所说的关系解决方案会更容易调试,因为您可以使用诸如 Base (menial.co.uk/base) 之类的 SQLite 资源管理器来查看正在运行的应用程序之外的坐标,但我是非常有信心我的解决方案会更快,因为它不必有另一个总是有与之相关的开销的关系。 Paulw11 解决方案的另一个问题是您的模型必须具有单独的经度和纬度,使用值转换器您可以直接使用 CLLocation。两种解决方案各有利弊,所以由您决定!以上是关于将核心数据行从一个表(实体)映射到 [CLLocation] 数组?的主要内容,如果未能解决你的问题,请参考以下文章
使用 RestKit 将一个裸露的 URL 数组映射到核心数据实体