源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Swift利用CoreData实现一个上班签到的小工具

  • 时间:2020-06-22 02:17 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Swift利用CoreData实现一个上班签到的小工具
[b]前言[/b] 我们在之前的两篇里面实现了一个十分简陋的通讯录,而且都是通过系统默认的方式创建的CoreData。可是实际中哪里有那么好的事情嘛,要是忘记在创建工程的时候勾选了下面这个图怎么办? [img]http://files.jb51.net/file_images/article/201712/2017125103740992.png?2017115103915[/img] 难道我们要把工程删除,再重新创建嘛?很多时候再开始工程的时候并特么的不知道需要用到数据库啊。更多的时候已经都开始敲代码了,连需求文档都还木有拿到手里,PM只会轻轻的说一句:设计图不是已经有了嘛,先画UI吧。 所以,CoreData Stack是为了解决这个问题诞生的嘛?很遗憾,并不是。看了前面的两篇文章之后,有木有觉得CoreData不怎么好用,还挺麻烦的呐?这时候要祭出CoreData Stack的啦。 [b]1. CoreData Stack的作用[/b] 其实这个东西在一篇的时候提到过,不信您看:Swift实践:使用CoreData完成一个通讯录存储 一个基本的 Core Data 栈由四个主要部分组成:托管对象 (NSManagedObject),托管对象上下文 (NSManagedObjectContext),持久化存储协调器 (NSPersistentStoreCoordinator),以及持久化存储 (NSPersistentStore)。 CoreDataStack,是自定义的一个CoreData 的栈对象,可以通过它,初始化项目的CoreData,以及获取到Context,对数据库进行增删改查等操作。 [b]2.创建 CoreData Stack[/b] 非典型技术宅既然说了这货有四部分组成,那咱们就一个一个来呗。艾玛,因为发现文章会被抄袭,抄袭之后有些人还不署名,搞的只好在文章里面内嵌入一些自己的名字。心酸~~~~ [b]2.1 iOS9[/b] 在iOS9中,CoreData Stack的三个核心类是这样的: -管理对象上下文NSManagedObjectContext [list] [*]对象模型NSManagedObjectModel[/*] [*]存储调度器NSPersistentStoreCoordinator[/*] [/list] 这个时候存储是在Documents中间。 [b]2.2 iOS10之后[/b] iOS10之后就有点不一样了, 增加了一个叫做NSPersistentContainer的东西。这个玩意儿作用就是用来管理CoreData Stack,为了能够让大家用起来更爽、更简单。 需要说明的是,NSPersistentContainer 一点都没有向下兼容的意思,完全不兼容iOS9.0,如果非要在iOS9.0里面使用,会直接闪退。 这个时候存储是在Library->Application Support中。 [b]2.3 来吧,开始创建吧[/b] 宅胖这么懒,怎么还可能再写一个兼容iOS9.0的呐,想太多了~~~哈哈!所以,俺们只写iOS10.0以后的。写到这个时候,连版本号都已经写烦了。 [list] [*]Step1:搞一个NSPersistentContainer出来[/*] [*]Step2:创建CoreData Stack[/*] [*]Step3:别忘了还有一个NSManagedObjectContext[/*] [*]Step4:提供一个保存数据的方法[/*] [*]Step5:最后别忘记了在AppDelegate.swift里面应用一下,不然不是白搞了半天嘛[/*] [/list]
 lazy var storeContainer: NSPersistentContainer = {
 let container = NSPersistentContainer(name: self.modelName)

 container.loadPersistentStores(completionHandler: { (storeDescription, error) in
  if let error = error as NSError? {
  debugPrint("Unclear error\(error)")
  }
 })
 return container
 }()

 lazy var managedContext: NSManagedObjectContext = {
 return self.storeContainer.viewContext
 }()

 func saveContext() {
 guard managedContext.hasChanges else { return }

 do {
  try managedContext.save()
 } catch let error as NSError {
  debugPrint("Unclear error\(error)")
 }

 }
[b]3. 一对多的关系[/b] CoreData中实体管理关系是有三种的:1V1,1VN,NVN。咱们之前的两个例子都是1V1。但是这个跟生活中不符啊,注意 例如一个人下了很多订单,订单里面又包含了很多商品。 [img]http://files.jb51.net/file_images/article/201712/2017125104346225.png?2017115104355[/img] 如图所示,Relationships表示管理关系的名称,Destination表示目标表的名字,Inverse表示反向关系。 前面两个都比较好理解,Inverse需要稍微多说一点点。如果没有反向关系,就选择No Inverse,但是苹果官方建议为了保证数据之间的一致性,最好设置反向关系。 [img]http://files.jb51.net/file_images/article/201712/2017125104411905.png?2017115104424[/img] [b]4. 完成Demo,了解使用CoreData Stack[/b] 然后咱们搞个小型本地化纯良心自觉单机版的打卡器。这个打卡器用来管理员工的每次打卡时间。可以增加、删除打卡时间。 完成后的效果图: [img]http://files.jb51.net/file_images/article/201712/2017125104444435.gif?2017115104453[/img] 思维导图如下: [img]http://files.jb51.net/file_images/article/201712/2017125104551556.jpg?2017115104636[/img] 4. 补充:如果创建工程的时候遗忘了勾选使用CoreData怎么办 如果忘选了也没有关系,创建一个新的Data Model文件: [img]http://files.jb51.net/file_images/article/201712/2017125104655960.png?201711510478[/img] 设置完数据库之后,按照如下操作: [img]http://files.jb51.net/file_images/article/201712/2017125104732830.jpg?2017115104755[/img] 好啦,就会自动生成文件啦。 [b]所有的源代码都在这里:[/b] github地址:[url=https://github.com/Stanbai/CoreDataDemo.git]https://github.com/Stanbai/CoreDataDemo.git[/url] 源码下载:[url=http://xiazai.jb51.net/201712/yuanma/CoreDataDemo(jb51.net).rar]http://xiazai.jb51.net/201712/yuanma/CoreDataDemo(jb51.net).rar[/url] [b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对编程素材网的支持。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部