是否可以枚举NSDictionary键来设置datamodel成员值?

时间:2015-09-16 14:06:16

标签: ios swift core-data

我有一个字典包含(例如)

"Mark":"Name","Green":"Lastname"

我有一个数据模型如下:

@interface Person : NSManagedObject

@property (nonatomic, retain) NSString * Name;
@property (nonatomic, retain) NSString * Lastname;

我可以枚举字典allkeys来设置datamodel成员值吗?

类似的东西:

let newPerson = CoreDataHelper.insertManagedObject(NSStringFromClass(Person), managedObjectContext: self.moc) as! Person

for key in self.newPersonDict!.allKeys {
    newPerson.key = self.newPersonDict!.objectForKey(key)
}

谢谢, 最大

3 个答案:

答案 0 :(得分:2)

你可以使用func setValuesForKeysWithDictionary(_ keyedValues:[NSObject:AnyObject])

答案 1 :(得分:2)

尝试这样的事情:

let newPerson = CoreDataHelper.insertManagedObject(NSStringFromClass(Person), managedObjectContext: self.moc) as! Person

for key in self.newPersonDict!.allKeys {
    newPerson.setValue(self.newPersonDict!.valueForKey(key), forKeyPath: key)   
}

答案 2 :(得分:0)

如其中一条评论中所述,您可以通过反思实现这一点。可能有更好的方法来做到这一点,但这里有一个如何做到这一点的例子

class YourClass : NSObject {

    func getKeys() -> Array<String> {
        let mirror = reflect(self)
        var keys = [String]()
        for i in 0..<mirror.count {
            let (name,type) = mirror[i]
            keys.append(name)
        }
        return keys
    }

    func getObjectForKey(key: String) -> AnyObject? {
        return self.valueForKey(key)
    }

}

你还需要施放AnyObject吗?对于您的特定类型,请注意,valueForKey在使用未知密钥调用时可能会导致异常。