我是使用CoreData的新手。我有一个类存储关于兴趣点的基本坐标信息,该类的代码是:
import Foundation
class StopAttributes: NSObject, NSCoding{
var latitude: Double!
var longitude: Double!
var state: String!
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeDouble(latitude, forKey: "latitude")
aCoder.encodeDouble(longitude, forKey: "longitude")
aCoder.encodeObject(state, forKey: "state")
}
required init?(coder aDecoder: NSCoder) {
latitude = aDecoder.decodeDoubleForKey("latitude")
longitude = aDecoder.decodeDoubleForKey("longitude")
state = aDecoder.decodeObjectForKey("state") as! String
}
override init() {
super.init()
}
}
我有一个上面描述的类的数组,如下所示:
var unsortedStopsData: [StopAttributes] = [StopAttributes]()
此外,我使用大约3000个条目填充此数组。我想使用CoreData保存这个数组。我已经定义了我的数据模型:
最后,我创建了托管对象类的子类,并在此类中将unsortedStopsData
转换为[StopAttributes]
,以便能够保存我的StopAttributes
数组。
我的问题是,我正确设计数据模型吗?如果没有,请你给我一些建议吗?
答案 0 :(得分:1)
任何数据模型是否适合任何目的取决于您在存储数据后如何使用数据。您的模型将存储数据。它是否适用于您需要如何使用数据是一个不同的问题。
使用单个可转换属性,几乎所有可以使用Core Data执行的操作都是获取每个实例。您无法构造有用的谓词,因此无法获取数据的子集。例如,您无法查找纬度和经度位于特定区域的每个实例。而且你无法按名称查找实例。如果这符合您的需求,那很好。但如果您的需求如此有限,那么您几乎没有从Core Data中获益。
如果您确实需要获取数据的子集,那么您的Core Data实体必须至少具有您将用于过滤的每个值的属性。你想找到基于纬度和经度的实例吗?如果是这样,那么它们应该是属性。