iOS在CoreData中简单封装了SQLite,让开发者不须要写sql语句就可使用SQLite进行CURD操做。sql
要使用CoreData切记在建立项目的时候选中CoreData选项。数据库
在操做SQLite的时候最终要的是得到一个NSManagedObjectContext对象,这个对象在AppDelegate中能够得到,而AppDelegate实例能够在UIApplication中得到,swift得到NSManagedObjectContext对象的实现能够这样写swift
context = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
SQLite中的每一条数据封装在NSManagedObject中,每一条数据都是一个NSManagedObject示例数组
下面的示例中须要使用一张SQLite数据表,在Xcode中建立一张表的实现:xcode
要想SQLite中添加数据,首先要得到NSManagedObjectContext实例,在上文中已经有写,在之后就再也不赘述,请自行获取。
而后须要一个对象来封装咱们要添加的数据,这就是以前说的NSManagedObject对象。能够用这种方式建立一个对象bash
var row: AnyObject = NSEntityDescription.insertNewObjectForEntityForName("User", inManagedObjectContext: context)
insertNewObjectForEntityForName方法的第一个参数是要操做的Entity名,也就是数据表名,第二个字段是数据库上下文(NSManagedObjectContext实例)。markdown
人后经过KVO的方式像这个对象传入咱们的数据,我这里的数据是从UITextField中得到的。测试
row.setValue(nameField.text, forKey: "name") row.setValue(ageField.text.toInt(), forKey: "age")
而后须要把该对象保存到SQLite中spa
context.save(nil)//保存数据
save方法的参数是一个NSError,这里传入nil,具体处理方法再也不赘述,后文一样不作处理。code
进行数据查询,须要一个NSFetchRequest实例进行查询操做,因此先穿件一个NSFetchRequest实例,其中的参数为Entity名
var query = NSFetchRequest(entityName: "User")
而后用数据库上下文进行查询,将结果保存到名为data的数组中,其类型为AnyObject
var data = context.executeFetchRequest(query, error:nil)!
而后,能够经过KVO的方式从中取出数据
var row: (AnyObject) = data[i] var name: AnyObject = row.valueForKey("name")! var age: AnyObject = row.valueForKey("age")!
更新数据须要先得到数据实例,这里使用上文查询数据中得到的data数组中的数据。
首先设置更新的数据
data[0].setValue(nameField.text, forKey: "name") data[0].setValue(ageField.text.toInt(), forKey: "age")
而后把更新完的数据实例进行保存便可,此时的数据库上下文要从该数据对象中得到
data[0].managedObjectContext?.save(nil)//更新数据
删除数据一样须要得到数据对象,一样使用查询到的data数组中的数据,调用数据库上下文中的deleteObject方法,传入要删除的对象,而后保存数据库上下文就能够删除数据。
//删除数据操做 context.deleteObject(data[0] as! NSManagedObject) //删除完后须要把结果保存到数据库 context.save(nil)