将核心数据行从一个表(实体)映射到 [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] 数组?的主要内容,如果未能解决你的问题,请参考以下文章

将类别父 ID 自引用表结构映射到 EF Core 实体

使用 RestKit 将一个裸露的 URL 数组映射到核心数据实体

如何将一个自定义实体映射到实体框架中的某些数据库表?

将数据行从一个表归档到另一个表

将核心数据实体的子集映射为 section-key-path

使用 MagicalRecord 在核心数据中映射和发布实体