关于使用Swift探索核心数据的过程我有以下功能,作为测试:
func insertObject (entityName:String) {
var newItem = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext:managedObjectContext!) as! EventList
let now = NSDate()
newItem.date = now
newItem.eventDescription = “Whatever Anniversary"
}
这似乎有效,但为了使我的函数更有用,我想传递一个描述我打算插入的对象的字典。 如下所示:
func insertObject (entityName:String,dico:NSDictionary) {
var newItem = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext:managedObjectContext!) as! EventList
for (key, value) in dico {
println("\(key) : \(value)")
newItem.key = value
}
}
问题出现了,这行错了:
newItem.key = value
使用的正确语法是什么?
这一行告诉我循环部分工作正常:
println("\(key) : \(value)")
答案 0 :(得分:2)
您可以对托管对象使用键值编码:
func insertObject (entityName:String, dico: [String : NSObject]) {
let newItem = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext:managedObjectContext!) as! EventList
for (key, value) in dico {
newItem.setValue(value, forKey: key)
}
}
可以缩短为
func insertObject (entityName:String, dico: [String : NSObject]) {
let newItem = NSEntityDescription.insertNewObjectForEntityForName(entityName, inManagedObjectContext:managedObjectContext!) as! EventList
newItem.setValuesForKeysWithDictionary(dico)
}
这种一般方法的问题是它会崩溃 运行时如果字典包含非属性的键 实体,或者数据类型不匹配。