美文网首页iOS学习笔记iOS学习开发
CoreData之数据的增、删、查

CoreData之数据的增、删、查

作者: 章鱼卷 | 来源:发表于2016-05-14 18:34 被阅读0次

    导语

    该文仅是笔者对CoreData的理解,文中书写不当和错误的地方还请各位看官给予指正。

    iOS数据存储有四种方式

    对象归档、Plist、SQLite和CoreData.该篇文章主要介绍CoreData的使用。

    为什么使用CoreData?

    1.代码量少:可以不用编写数据库接口代码;2.界面可视化;3.可以使用instruments相关模版测试;

    基本构成

    数据持久化-CoreData、SQLite、FMDB - 推酷

    1)NSManagedObjectContext(被管理的数据上下文)

    操作实际内容(操作持久层)

    作用:插入数据,查询数据,删除数据

    2)NSManagedObjectModel(被管理的数据模型)

    数据库所有表格或数据结构,包含各实体的定义信息

    作用:添加实体的属性,建立属性之间的关系

    操作方法:视图编辑器,或代码

    3)NSPersistentStoreCoordinator(持久化存储助理)

    相当于数据库的连接器

    作用:设置数据存储的名字,位置,存储方式,和存储时机

    4)NSManagedObject(被管理的数据记录)

    相当于数据库中的表格记录

    5)NSFetchRequest(获取数据的请求)

    相当于查询语句

    6)NSEntityDescription(实体结构)

    相当于表格结构

    7)后缀为.xcdatamodeld的包

    里面是.xcdatamodel文件,用数据模型编辑器编辑

    编译后为.momd或.mom文件

    数据查询、添加、删除

    数据查询可以通过NSFetchRequest来实现,有四种方式。假设CoreData中的实体为Venue,定义一个数组 var venues:[Venue]! = []

    managedContext = appDelegate.managedObjectContext

    //查询数据

    //  1.

    let batchUpdate = NSBatchUpdateRequest(entityName: "Venue")

    batchUpdate.propertiesToUpdate = ["实体中的属性" : 属性类型,例如:NSNumber(bool: true)]

    batchUpdate.affectedStores = managedContext.persistentStoreCoordinator!.persistentStores

    batchUpdate.resultType = .UpdatedObjectsCountResultType

    do {

    let batchResult = try managedContext.executeRequest(batchUpdate) as! NSBatchUpdateResult

    print("Records updated \(batchResult.result!)")

    } catch let error as NSError {

    print("Could not update \(error), \(error.userInfo)")

    }

    //  2.

    fetchRequest = NSFetchRequest(entityName: "Venue")

    //  3.  这步的实现需要在.xcdatamodel文件中建立一个FetchRequest,如下图所示

    let model = managedContext.persistentStoreCoordinator?.managedObjectModel

    fetchRequest = model?.fetchRequestTemplateForName("FetchRequest")

    //  4

    asyncFetchRequest = NSAsynchronousFetchRequest(fetchRequest: fetchRequest, completionBlock: {[unowned self] (result: NSAsynchronousFetchResult! )

    -> Void in

    self.venues = result.finalResult as! [Venue]

    })

    do{

    //方法2和3都可通过这句话得到venues

    // venues = try managedContext.executeFetchRequest(fetchRequest) as! [Venue]

    //执行方法 4

    try managedContext.executeRequest(asyncFetchRequest)

    }catch let error as NSError {

    print(error)

    }

    //添加数据

    let venue = NSEntityDescription.insertNewObjectForEntityForName("Venue",inManagedObjectContext: managedObjectContext) as! Venue

    venue.name = "zhangsan"

    venue.age = 18

    do {

    try managedContext.save()

    }catch let error as NSError {

    print("could not save\(error),\(error.userInfo)")

    }

    //删除数据

    //let fetchRequest = NSFetchRequest(entityName: "Venue")

    do {

    let results = try managedContext.executeFetchRequest(fetchRequest)

    for data in results {

    managedContext.deleteObject(data as! NSManagedObject)

    do {

    try managedContext.save()

    }catch let error as NSError {

    print("could not save\(error),\(error.userInfo)")

    }

    }

    } catch let error as NSError {

    print("Could not fetch \(error), \(error.userInfo)")

    }

    }

    上图实现的方式:长按Add entity

    相关文章

      网友评论

        本文标题:CoreData之数据的增、删、查

        本文链接:https://www.haomeiwen.com/subject/uyeelttx.html