iOS学习笔记iOS学习开发

CoreData之数据的增、删、查

2016-05-14  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读