IOS: CoreData
本篇主要介绍IOS Swift 中CoreData的基本用法和一些自己的理解
CoreData是一个数据库框架,可以让在app上本地存储一些数据,也有数据库基本的增删改查功能
CoreData有三部分: Model, PersistentContainer, Context
首先先建一个model
这里我建了一个简单的模型,entity的名字是person,其中这个entity有三个属性,分别是name,age,gender
PersistentContainer
PersistentContainer我会把它想成是一个中间人,可以管理可建造CoreData object。需要注意的是peresitentContainer需要是一个lazy的var,因为当我们一开始启动app的时候,我们一般是不需要Core data的,lazy可以是当我们开始使用core data的时候,这个var就会initialize,这样可以使app更快捷, 剩下的是一些必须要的设定,如我们需要description,还需要一个storeType,这里我的storeType是一个var,因为一会之后方便我们决定我们是要存储到NSSQL里,还是NSMemory里,前者把数据是保存到app里,后者是保存在内存里,在内存中当我们关闭app时候数据可以自动删除,方便之后可以会使用unit test去测试core data是否运行
lazy var persistentContainer: NSPersistentContainer = {let persistentContainer = NSPersistentContainer(name: "Model")let description = persistentContainer.persistentStoreDescriptions.firstdescription?.type = storeTypepersistentContainer.loadPersistentStores(completionHandler: { (_, _) in})return persistentContainer
}()
Context
context我把它想象成一个大类,里面有各种object,object中会有数据,这个会经常用到,所以我把它写进一个function。这里的storeType的default是SQL,当我们想改的时候就可以成为NSInMemoryType
func getContext(storeType: String = NSSQLiteStoreType) -> NSManagedObjectContext {let context = getPersistentContainer(storyType: storeType).viewContextreturn context
}
下面是CoreDataController完整的代码
import Foundation
import CoreDataclass CoreDataController {var storeType: String!static let coreDataManager = CoreDataController()private init(){}lazy var persistentContainer: NSPersistentContainer = {let persistentContainer = NSPersistentContainer(name: "Model")let description = persistentContainer.persistentStoreDescriptions.firstdescription?.type = storeTypepersistentContainer.loadPersistentStores(completionHandler: { (_, _) in})return persistentContainer}()func getPersistentContainer(storyType: String)-> NSPersistentContainer {self.storeType = storyTypereturn persistentContainer}func getContext(storeType: String = NSSQLiteStoreType) -> NSManagedObjectContext {let context = getPersistentContainer(storyType: storeType).viewContextreturn context}func createObject<T: NSManagedObject>(entity: T.Type, storeType: String = NSSQLiteStoreType) throws -> T {let context = getContext()let entityName = String(describing: entity)guard let description = NSEntityDescription.entity(forEntityName: entityName, in: context) else { throw error.invalidEntityType }let object = T(entity: description, insertInto: context)return object}enum error: Error {case invalidEntityType}
}
我这里把coreDataController用singleton的方式来方便之后access(因为都是在用同一个model,这样会比较便捷)
值得注意的是这个createObject的function,这里我需要input我想要在哪一个entity里创建一个object,如果这个entity的名字错误,就会显示一个invalidEntityType的error,同时这里我用了generic ,这样可以方便以后用不同的type(只要是在NSManagerType的范畴以内)
最后在viewDidload 中运行看看,可以想像我们在创建一个object的时候,想象形成了一行数据,这样我们就可以在这一个object中添加我们想要的数据
IOS: CoreData相关推荐
- iOS coredata 多表查询
先创建几个表. 1.部门表:department dp_id Integer primary key dp_deptname varchar(20) //使用coredata实体创建时用strin ...
- iOS CoreData (一) 增删改查
代码地址如下: http://www.demodashi.com/demo/11041.html Core Data是iOS5之后才出现的一个框架,本质上是对SQLite的一个封装,它提供了对象-关系 ...
- iOS CoreData简单入门 - Swift版
CoreData --- Swift 1,创建IOS项目并选择使用CoreData,选择语言Swift 2,打开项目目录 会有一项 CoreDataDemo.xcdatamodeld ,打开它,添加 ...
- IOS CoreData 简单使用CURD
2019独角兽企业重金招聘Python工程师标准>>> iOS在CoreData中简单封装了SQLite,让开发者不需要写sql语句就可以使用SQLite进行CURD操作. 要使用C ...
- iOS - CoreData了解和简单应用
core data是一种本地数据存储方式,和archiver,sqllite的作用差不多 CoreData主要目的是简化开发离线体验的成本,它抽象了设备的本地存储API,应用方向当然是为App提供离线 ...
- ios CoreData的使用(封装)
本文讲解CoreData的使用,封装: 文章末尾附有demo 一.CoreData的简单理解 CoreData是一个模型层的技术,也是一种持久化技术,它能将模型对象的状态持久化到磁盘里,我们不需要使用 ...
- ios: coreData的NSManagedObject setvalue为null
当用到coredata的时候,当你存数据: NSManagedObject *oneObject = [NSEntityDescriptioninsertNewObjectForEntityForNa ...
- iOS CoreData版本升级和数据库迁移
2018年10月24日 10:20:00 https://blog.csdn.net/weixin_34168700/article/details/86021876 app中使用了CoreData, ...
- iOS CoreData的使用
CoreData是一个专门管理数据服务的框架,把OC对象和存储在SQLite文件中的数据进行互相转换,极大地方便了开发者在数据服务方面的开发. 1. 创建CoreData 在文件创建区下,选择[Cor ...
最新文章
- Oracle HowTo:如何解决Oracle10gR2 ORA-19554关于SBT_TAPE问题
- pip download的使用记录
- 取整 除法_Python学习教程:Python3除法之真除法、截断除法和下取整对比
- timedatectl使用
- 关于ASP.NET动态加载Master页面
- C++使用Json作为数据包装格式的通信
- coco数据集大小分类_Microsoft COCO 数据集
- 数控机床需要c语言程序吗,数控机床编程与操作--详细介绍
- 本地提交到yarn_Flink on Yarn三部曲之三:提交Flink任务
- 麦肯锡160页报告:2030年全球将可能有8亿人要被机器抢饭碗
- request[limit]取不到前台的值_基于uFUN开发板的心率计(二)动态阈值算法获取心率值...
- Mac新手使用技巧——AirDrop
- iOS知识点,iOS开发笔记
- Java DAO、Service、web理解之DAO层
- url 与 domain
- 【Rocksdb实现分析及优化】事务之Pessimistic ①
- 查询自己名下所有微信账户
- excel两个表格内容合并
- UML图解和UML代码范例
- 带peano余项的泰勒公式