我在我的应用程序中设置了Core Data,这样当没有互联网连接时,应用程序将在本地保存数据。建立连接后,它将触发在线模式,然后我需要将存储在Core Data中的数据发送到我的数据库。
我的问题是你如何将一个实体变成这样的字典:
<Response: 0x1c0486860> (entity: AQ; id: 0xd000000000580000 <x-coredata://D6656875-7954-486F-8C35-9DBF3CC64E34/AQ/p22> ; data: {
amparexPin = 3196;
dateFull = "\"10/5/2018\"";
finalScore = 34;
hasTech = No;
intervention = Before;
responseValues = "(\n 31,\n 99,\n 82,\n 150,\n 123,\n 66,\n 103,\n 125,\n 0,\n 14\n)";
timeStamp = "\"12:47\"";
who = "Luke";
})
进入这个:
amparexPin: 5123
timeStamp: 10:30
hasTech: No
intervention: Before
基本上是一个字典,我试图对每个实体上的每组数据执行相同的操作。我知道这听起来过于复杂,但每个实体都需要通过相同的过滤器/函数然后将其数据发送到数据库。任何有关这方面的帮助都会很棒!
答案 0 :(得分:0)
你可以使用这个功能
func objectAsDictionary(obj:YourObject) -> [String: String] {
var object: [String: String] = [String: String]()
object["amparexPin"] = "\(obj.amparexPin)"
object["timeStamp"] = "\(obj.timeStamp)"
object["hasTech"] = "\(obj.hasTech)"
object["intervention"] = "\(obj.intervention)"
return object
}
答案 1 :(得分:0)
我看到两种方式去这里。第一个是使用一些&#34;编码&#34;函数,toDictionary() -> [String, Any?]
每个托管对象类在扩展中实现,然后在发送之前在每个对象上调用此函数
这种方式的优点是您可以更精确地控制实体和字典之间的每个映射,缺点是您需要为核心数据模型中的每个实体实现它。
另一种方法是利用NSEntityDescription和KVC来提取一个函数中的所有值。此类包含所有属性的字典attributesByName
,可用于使用键值编码提取所有值。根据您是否需要映射值的数据类型,您可以从NSAttributeDescription获取该值。 (如果您需要处理关系等问题,还有propertiesByName
)。
一个简化的例子。 (直接写在这里所以不保证它编译)
static func convertToDictionary(object: NSManagedObject) -> [String, Any?] {
let entity = object.entity
let attributes = entity.attributesByName
var result: [String: Any?]
for key in attributes.keys {
let value = object.valueForKey: key)
result[key] = value
}
}