swift CoreData 基本操作

本文详细介绍如何在iOS应用中使用CoreData进行数据管理,包括实体创建、属性定义、增删改查等核心操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

怎么创建相关文件我这里不在叙述,在这片文章中主要是coredata的基本操作,即增删改

在 .xcdatamodeld 文件中创建了一个实例entities, 名为Info, 添加两项属性,age:Integer 32 和 name:String

接下来都是在ViewController.swift中操作

首先 import CoreData

import CoreData

接下来,我们来获取上下文对象,并且封装成一个函数

//获取上下文对象
    func getContext()->NSManagedObjectContext{
        //获取总代理
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        //获取托管对象总管
        //let managedObjectContect = appDelegate.persistentContainer.viewContext
        //返回托管对象总管
        return appDelegate.persistentContainer.viewContext
    }

这样后面想要获取上下文对象就使用这一函数,例如

let context = getContext()

我把所有操作都封装成函数,可以根据需求编写不同的参数

//增
    func infoInsert(name:String,age:Int32){
        //获取上下文
        let context = getContext()
        //在Info中创建一条记录
        let newRecord = NSEntityDescription.insertNewObject(forEntityName: "Info", into: context) as! Info
        //写入新纪录的值
        newRecord.name = name
        newRecord.age = age
        //保存
        do{
            try context.save()
        }catch{
            fatalError()
        }
    }

用predicate过滤出想要的记录,在(format: "name == %@", name) 中,后面的name是一个变量的名字,就是按照该变量来过滤,前者中的name是Info中的属性名。

查询结果可能会有多个,本例子中就是多条记录name相同,所以用一个数组来保存,若是想要筛选结果唯一,那就通过特殊Info属性来查找,例如在Info添加一条属性,保存身份证,或学号、工号这种不会相同的,查出来的结果就唯一了。

//删
    func infoDelete(name:String){
        //获取上下文
        let context = getContext()
        //抓取Info内容
        let fetchRequest:NSFetchRequest = Info.fetchRequest()
        //按要求过滤
        fetchRequest.predicate = NSPredicate(format: "name == %@", name)
        do{
            //保存过滤出的结果
            let result:[Info] = try context.fetch(fetchRequest)
            for one in result{
                //结果全部删除
                context.delete(one)
            }
            try context.save()
        }catch{
            fatalError()
        }
    }

修改的操作和删除基本一样,即使查找出来,删除操作改为修改,然后保存回去。查询操作亦是如此。

//改
    func infoChange(name:String,newName:String,newAge:Int32){
        //获取上下文
        let context = getContext()
        //抓取Info内容
        let fetchRequest:NSFetchRequest = Info.fetchRequest()
        //按要求过滤
        fetchRequest.predicate = NSPredicate(format: "name == %@", name)
        do{
            //结果全部删除
            let result:[Info] = try context.fetch(fetchRequest)
            for one in result{
                //修改
                one.name = newName
                one.age = newAge
            }
            try context.save()
        }catch{
            fatalError()
        }
    }

全部数据拿出来存放在数组里面

var info:[Info] = [Info]()

通过函数,info = getAllInfo()把所有数据全部放入infoz中

//获取所有数据
    func getAllInfo()->[Info]{
        let context = getContext()
        let fetchRequest:NSFetchRequest = Info.fetchRequest()
        do{
            let result = try context.fetch(fetchRequest)
            return result
        }catch{
            fatalError("读取失败")
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值