确定coreData属性的types

我写了一个库,允许开发人员在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 = [“名称”,“年龄”]

  • 值= [“查克·诺里斯”,“76”]

问题是,在我的coreData对象的年龄属性是整型的types,你可能会注意到查克·诺里斯的年龄是string,所以当我尝试执行我的应用程序时,我得到一个错误:

终止由于未捕获的exception'NSInvalidArgumentException'的应用程序,原因:'不可接受的属性types的值:属性=“年龄”; 所需的types= NSNumber; 给定types= _TtCs19_NSContiguousString; 价值= 76。

问题是:如何识别属性types,以便将值转换为相同的types

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

 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() }