Swift CoreData增删改查

之前写过CoreData,现在都忘记了,不多说,直接上代码和截图,增删改查的功能都有

import UIKit
import CoreData

class ViewController: UIViewController {
    let entityName = "Person"
    let managedobjectContext = NSManagedobjectContext(concurrencyType: .mainQueueConcurrencyType)
    
    override func viewDidLoad() {
        super.viewDidLoad()
        if let path = Bundle.main.path(forResource: "testCoredataDemo",ofType: "momd") {
            if let mom = NSManagedobjectModel(contentsOf: URL(fileURLWithPath: path)) {
                let psc = NSPersistentStoreCoordinator(managedobjectModel: mom)
                managedobjectContext.persistentStoreCoordinator = psc
                if let dataPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,true).last {
                    print(dataPath)
                    let path = dataPath.appending("/testCoredataDemo.sqlite")
                    do {
                        try psc.addPersistentStore(ofType: NSsqliteStoreType,configurationName: nil,at: URL(fileURLWithPath: path),options: nil)
                    } catch {
                        print(error)
                    }
                }
            }
        } else {
            print("path is error")
        }
    }
    //增
    @IBAction func insertAction(_ sender: UIButton) {
        let person = NSEntityDescription.insertNewObject(forEntityName: entityName,into: managedobjectContext) as! Person
        person.name = "First name \(10)"
        person.age = Int64(truncating: NSNumber(value: arc4random_uniform(100)))
        do {
            try managedobjectContext.save()
        } catch {
            print(error)
        }
    }
    // 删
    @IBAction func deleteAction(_ sender: UIButton) {
        let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
        let predicate = nspredicate.init(format: "age = %@",NSNumber(value: 44))
        request.predicate = predicate
        do {
            let result = try managedobjectContext.fetch(request)
            result.forEach({ (person) in
                managedobjectContext.delete(person as! NSManagedobject)
            })
            print(managedobjectContext.deletedobjects)
            if managedobjectContext.hasChanges {
                try managedobjectContext.save()
            }
        } catch {
            print(error)
        }
    }
    
    // 改
    @IBAction func changeAction(_ sender: UIButton) {
        let request = NSFetchRequest<NSFetchRequestResult>.init(entityName: "Person")
        let predicate = nspredicate(format: "age = %@",NSNumber(value: 30))
        request.predicate = predicate
        do {
            let result = try managedobjectContext.fetch(request) as! [Person]
            result.forEach({ (person) in
                person.age = 10000
            })
            print(managedobjectContext.updatedobjects)
            if managedobjectContext.hasChanges {
                try managedobjectContext.save()
            }
        } catch {
            print(error)
        }
    }
    
    // 查
    @IBAction func searchAction(_ sender: Any) {
        let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Person")
        do {
            let result = try managedobjectContext.fetch(request) as! [Person]
            print(result)
            print(managedobjectContext.registeredobjects)
        } catch {
            print(error)
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // dispose of any resources that can be recreated.
    }
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...