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