识别核心数据属性的类型



我正在编写一个库,允许开发人员在coreData上应用SQL代码,如下所示:

let manager = coreSQL()
manager.prepare("INSERT INTO Entity (name, age) VALUES (?,?)")
manager.execute(["Chuck Norris" , "76"])

要插入coreData,我使用这个

let context:NSManagedObjectContext = appDel.managedObjectContext
let newRow = NSEntityDescription.insertNewObjectForEntityForName(tableName, inManagedObjectContext: context)
if (columnsArray.count == values.count){
    for i in 0 ..< columnsArray.count{
        newRow.setValue(values[i], forKey: columnsArray[i])
    }
    do {try context.save()} catch _ {}
}
  • columnsArray=["name","age"]

  • values=["Chuck Norris","76"]

问题是,在我的coreData对象中,age属性的类型是Integer,正如你可能注意到的,Chuck Norris的age是String,所以当我试图执行我的应用程序时,我得到了一个错误:

由于未捕获的异常"NSInvalidArgumentException"而终止应用程序,原因:"属性的值类型不可接受:property="age";所需类型=NSNumber;给定类型=_TtCs19_NS连续字符串;值=76.’

问题是:如何识别属性类型以便将值强制转换为相同类型

您可以通过询问实体来识别属性类型:

let context:NSManagedObjectContext = appDel.managedObjectContext
let newRow = NSEntityDescription.insertNewObjectForEntityForName(tableName, inManagedObjectContext: context)
let attributes = newRow.entity().attributesByName()
if (columnsArray.count == values.count){
    for i in 0 ..< columnsArray.count{
        let attributeDescription = newRow.entity.attributesByName[columnsArray[1]]
        switch attributeDescription.attributeType {
        case StringAttributeType:
        }
        newRow.setValue(values[i], forKey: columnsArray[i])
    }
    try! context.save()
}    

最新更新