swift

时间:2015-06-02 05:04:43

标签: ios swift core-data

关于使用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)")

1 个答案:

答案 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)
}

这种一般方法的问题是它会崩溃 运行时如果字典包含非属性的键 实体,或者数据类型不匹配。