swift-CoreData数据库结合plist文件预置数据案例

本文详述了在Swift项目中如何使用CoreData搭建数据库,通过plist文件预置数据,涵盖了数据库的创建、增删改查操作,并提供了案例源码下载链接。
摘要由CSDN通过智能技术生成

1、前言

本文主要记录swift开发Core Data数据库相关知识,从项目搭建,到plist数据准备,再到数据库的增删改查。并且提供源码免费下载。好记性不如烂笔头,记录一下方便以后学习,毕竟是初学者,哈哈,学无止境,以后会持续不断更新。

2、环境搭建

2.1、新建CoreData工程

新建包含CoreData的工程,xCode->File->New->Project,下面一步时,记得勾选“Use Core Data”。在这里插入图片描述
新建完成之后,会看到工程根目录下有个和工程名称一模一样的后缀名为"xcdatamodeld"的文件,该文件就是数据库文件。再打开工程的AppDelegate可以看到有关该文件的全局变量和全局方法已自动生成。

    // MARK: - Core Data stack
    lazy var persistentContainer: NSPersistentContainer = {
   
        //CoredataPractice为数据库文件的名称,可以修改,但必须一致。
        let container = NSPersistentContainer(name: "CoredataPractice")
        container.loadPersistentStores(completionHandler: {
    
        (storeDescription, error) in
            if let error = error as NSError? {
   
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()
    // MARK: - Core Data Saving support
    func saveContext () {
   
        let context = persistentContainer.viewContext
        if context.hasChanges {
   
            do {
   
                try context.save()
            } catch {
   
                let nserror = error as NSError
                fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    }

2.2、旧工程引入CoreData

新建时没有选择use core data,也可以随时新建数据库文件,如下: 在这里插入图片描述
新建的文件命名可以随意,新建完成之后,这里取名为test,打开AppDelegate,将上面的那段自动生成的代码加进去,特别注意NSPersistentContainer对象初始化的name必须与后缀名为xcdatamodeld的文件名一模一样。

3、数据库文件维护

打开数据库文件,界面如下:在这里插入图片描述

3.1、Entity/Attribute

点击Add Entity,新建一个Entity,这里相当于一个数据库表。在里面增加Attribute,相当于数据库表字段。Attribute有很多种类型,如下:
在这里插入图片描述
除了一些常用的基本数据类型外,Transformable类型可以包含数组,字典等。选择完成数据类型之后可以对该字段做一些个性化的设置,如下图:
在这里插入图片描述
设置字段是否是可选,最小最大长度,默认值,或者正则表达式等等。注意如果数据库中已有数据,再要修改数据库某字段的类型,再次运行到手机上之后,程序会崩溃,需先卸载再安装,当然仅限于开发阶段。

3.2、Relationship

关联关系这个应该是经常用到的了,比如本案例,数据库表字段如下:
Cartoon动画片表

字段 类型 说明
name String 动画片名称

Character人物角色表

字段 类型 说明
name String 角色名称
isProtagonist Bool 是否主角
age Int 16 年龄
remark String 备注

一部动画片对应多个人物角色。此时需要建立关联关系。在Cartoon表中建立Relationship,取名为roles,如下图:
在这里插入图片描述

  • Relationship命名为roles。
  • Destination选择Character。
  • 右边Delete Rule选择为Cascade,即关联删除,如果删除了这个动画片,就会同样删除动画片关联的所有人物角色。
  • 右边type选为To Many即一对多。

在Character表中同样需要建立关系,这个人物所属的动画,如下图:
在这里插入图片描述

  • Relationship命名为cartoon_name。
  • Destination选择Cartoon。
  • Inverse选择roles,即对应Cartoon表中的关系名称。
  • 右边Delete Rule选择为Nullify,无任何关联。
  • 右边type选为To One即一对一,一个人物角色只能对应一部动画片。

此时可以回到Cartoon表添加roles关系的指向了,如下图:
在这里插入图片描述
至此,一个完整的关联关系建立起来了。至于如何赋值,可以参考后文5.3。

4、plist文件操作

plist文件可以给数据库预置一些数据。新建plist文件,New File->Property List(Resource)。如下:
在这里插入图片描述
新建完成之后,设置根节点类型,这里选为Array,Item类型选为字典
在这里插入图片描述
添加一些字段,及对应的数据
在这里插入图片描述
至此准备工作完毕。

5、数据库读写

5.1、读取plist文件数据

		//该段代码是读取datalist.plist文件中的所有数据
        let plistPath : String = Bundle.main.path(forResource: "datalist.plist", ofType:nil)!
        let plistArray : NSArray = NSArray(contentsOfFile: plistPath)!
        for item in plistArray {
   
            let itemDict: [String: Any] = item as! [String : Any]
            print(item)
        }

5.2、数据库增查方法

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值