本篇主要介绍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相关推荐

  1. iOS coredata 多表查询

    先创建几个表. 1.部门表:department dp_id  Integer primary key dp_deptname  varchar(20) //使用coredata实体创建时用strin ...

  2. iOS CoreData (一) 增删改查

    代码地址如下: http://www.demodashi.com/demo/11041.html Core Data是iOS5之后才出现的一个框架,本质上是对SQLite的一个封装,它提供了对象-关系 ...

  3. iOS CoreData简单入门 - Swift版

    CoreData --- Swift 1,创建IOS项目并选择使用CoreData,选择语言Swift 2,打开项目目录 会有一项 CoreDataDemo.xcdatamodeld ,打开它,添加 ...

  4. IOS CoreData 简单使用CURD

    2019独角兽企业重金招聘Python工程师标准>>> iOS在CoreData中简单封装了SQLite,让开发者不需要写sql语句就可以使用SQLite进行CURD操作. 要使用C ...

  5. iOS - CoreData了解和简单应用

    core data是一种本地数据存储方式,和archiver,sqllite的作用差不多 CoreData主要目的是简化开发离线体验的成本,它抽象了设备的本地存储API,应用方向当然是为App提供离线 ...

  6. ios CoreData的使用(封装)

    本文讲解CoreData的使用,封装: 文章末尾附有demo 一.CoreData的简单理解 CoreData是一个模型层的技术,也是一种持久化技术,它能将模型对象的状态持久化到磁盘里,我们不需要使用 ...

  7. ios: coreData的NSManagedObject setvalue为null

    当用到coredata的时候,当你存数据: NSManagedObject *oneObject = [NSEntityDescriptioninsertNewObjectForEntityForNa ...

  8. iOS CoreData版本升级和数据库迁移

    2018年10月24日 10:20:00 https://blog.csdn.net/weixin_34168700/article/details/86021876 app中使用了CoreData, ...

  9. iOS CoreData的使用

    CoreData是一个专门管理数据服务的框架,把OC对象和存储在SQLite文件中的数据进行互相转换,极大地方便了开发者在数据服务方面的开发. 1. 创建CoreData 在文件创建区下,选择[Cor ...

最新文章

  1. Oracle HowTo:如何解决Oracle10gR2 ORA-19554关于SBT_TAPE问题
  2. pip download的使用记录
  3. 取整 除法_Python学习教程:Python3除法之真除法、截断除法和下取整对比
  4. timedatectl使用
  5. 关于ASP.NET动态加载Master页面
  6. C++使用Json作为数据包装格式的通信
  7. coco数据集大小分类_Microsoft COCO 数据集
  8. 数控机床需要c语言程序吗,数控机床编程与操作--详细介绍
  9. 本地提交到yarn_Flink on Yarn三部曲之三:提交Flink任务
  10. 麦肯锡160页报告:2030年全球将可能有8亿人要被机器抢饭碗
  11. request[limit]取不到前台的值_基于uFUN开发板的心率计(二)动态阈值算法获取心率值...
  12. Mac新手使用技巧——AirDrop
  13. iOS知识点,iOS开发笔记
  14. Java DAO、Service、web理解之DAO层
  15. url 与 domain
  16. 【Rocksdb实现分析及优化】事务之Pessimistic ①
  17. 查询自己名下所有微信账户
  18. excel两个表格内容合并
  19. UML图解和UML代码范例
  20. 带peano余项的泰勒公式

热门文章

  1. 金融数据分析 实验四 金融风险价值计算
  2. 物联网核心技术M2M的构成、基本特征和应用类别
  3. Android Wi-Fi 四次握手简介
  4. sap客户信贷_通过SAP ABAP接口修改客户信贷主数据
  5. 燕山大学校园网自动登录问题解决方案
  6. html5 中scale函数,javascript中scale怎么使用?
  7. Word文档中不显示图片(只有框)
  8. 彻底解决IDEA输出中文乱码问题
  9. Android libyuv应用系列(二)libyuv在Android中的使用
  10. iphone html 手机震动,​苹果手机震动器在哪里?如何设置与关闭?