以前使用过OC版本的CoreData应该很好理解Swift方式,所以这里简单的展示一下,增删改查的方法使用,同时给大家说一下创建步骤,方便大家的使用,转载请注明出处,谢谢~

步骤一:创建一个Swift的新项目,记得勾选对应的配置项,如图:

步骤二:打开****.xcdatamodeld文件,点击Add Entity,添加一个实体类,可以自己重定义类名,然后在类中添加属性,如图:

步骤三:打开AppDelegate文件,添加相关代码,注意红色的地方要改成自己项目中对应的名称

//MARK:------注意下面的四个方法需要自己添加
    lazy var applicationDocumentsDirectory: URL = {
        // The directory the application uses to store the Core Data store file. This code uses a directory named "me.appkitchen.cd" in the application's documents Application Support directory.
        let urls = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        return urls[urls.count-1]
    }()
    lazy var managedObjectModel: NSManagedObjectModel = {
        // The managed object model for the application. This property is not optional. It is a fatal error for the application not to be able to find and load its model.
        let modelURL = Bundle.main.url(forResource: "SwiftCoreDataDemo", withExtension: "momd")!
        return NSManagedObjectModel(contentsOf: modelURL)!
    }()
    lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
        // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail.
        // Create the coordinator and store
        let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
        let url = self.applicationDocumentsDirectory.appendingPathComponent("OneOneEntity.sqlite")
        var failureReason = "There was an error creating or loading the application's saved data."
        do {
            try coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: nil)
        } catch {
            // Report any error we got.
            var dict = [String: AnyObject]()
            dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" as AnyObject?
            dict[NSLocalizedFailureReasonErrorKey] = failureReason as AnyObject?
            
            dict[NSUnderlyingErrorKey] = error as NSError
            let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
            // Replace this with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
            abort()
        }
        
        return coordinator
    }()
    lazy var managedObjectContext: NSManagedObjectContext = {
        // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) This property is optional since there are legitimate error conditions that could cause the creation of the context to fail.
        let coordinator = self.persistentStoreCoordinator
        var managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
        managedObjectContext.persistentStoreCoordinator = coordinator
        return managedObjectContext
    }()

步骤四:开始写自己的增删该查方法

//增加数据
    func saveData(textStr:String) {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let manageContext = appDelegate.managedObjectContext
        let entityOne = NSEntityDescription.entity(forEntityName: "OneOneEntity", in: manageContext)
        let itemS = NSManagedObject.init(entity: entityOne!, insertInto: manageContext)
        itemS.setValue(textStr, forKey: "textStr")
        do {
            try manageContext.save()
            self.dataArray.append(itemS)
            //print("..........\(itemS)")
        } catch  {
            print("存储错误...")
        }
    }
    //删除
    func deleteData(aIndexPath:IndexPath) {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let manageContext = appDelegate.managedObjectContext
        
        manageContext.delete(self.dataArray[aIndexPath.row])
        
        do {
            try manageContext.save()
            self.dataArray.remove(at: aIndexPath.row)
            self.myTableView.reloadData()
        } catch  {
            print("存储错误...")
        }
    }
    //修改
    func updateData(aIndxPath:IndexPath,upStr:String) {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let manageContext = appDelegate.managedObjectContext
        //let entityOne = NSEntityDescription.entity(forEntityName: "OneOneEntity", in: manageContext)
        //创建查询请求
        let fetchRequest = NSFetchRequest<NSFetchRequestResult>.init(entityName: "OneOneEntity")
        //获取数据
        do {
            let results = try manageContext.fetch(fetchRequest)
            //找到修改的数据
            let oneObj:NSManagedObject = results[aIndxPath.row] as! NSManagedObject
            oneObj.setValue(upStr, forKey: "textStr")
            do {
                try manageContext.save()
                do {
                    let results1 = try manageContext.fetch(fetchRequest)
                    self.dataArray = results1 as! [NSManagedObject]
                    self.myTableView.reloadData()
                } catch  {
                    print("查询错误...")
                }
            } catch  {
                print("存储错误...")
            }
            
        } catch  {
            print("修改错误...")
        }
    }
    //查询
    func lookUpData() {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let manageContext = appDelegate.managedObjectContext
        
        let fetchReq = NSFetchRequest<NSFetchRequestResult>(entityName: "OneOneEntity")
        do {
            let results = try manageContext.fetch(fetchReq)
            self.dataArray = results as! [NSManagedObject]
            self.myTableView.reloadData()
        } catch  {
            print("查询错误...")
        }
    }

效果图:(具体代码,请自行研究,如果喜欢请点Star,源码:https://github.com/hbblzjy/SwiftCoreDataDemo

     

     

Swift基础之CoreData的使用的更多相关文章

  1. swift基础:第六部分:类与对象

    http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...

  2. swift基础:第二部分:函数和闭包

    今天本来想利用上午的时间本来打算将swift基础部分学习完的,不巧的是,后台来和我讨论用户评价的接口,讨论过后,商讨出一种可行的方案,十几分钟时间过去了,我拿到将接口介入到已经完成的页面中,完美,终于 ...

  3. Swift基础语法学习总结(转)

    Swift基础语法学习总结 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift使用print和println打印,它的传参是一个泛型 ...

  4. Swift基础语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...

  5. swift -- 基础

    swift -- 基础 1.常量和变量 常量: let 变量: var 2.声明常量和变量 常量的声明: let let  a = 1         //末尾可以不加分号,等号两边的空格必须对应(同 ...

  6. iOS Swift 模块练习/swift基础学习

    SWIFT项目练习     SWIFT项目练习2 iOS Swift基础知识代码 推荐:Swift学习使用知识代码软件 0.swift中的宏定义(使用方法代替宏) 一.视图  +控件 1.UIImag ...

  7. Swift基础学习

    Swift基础学习  http://c.biancheng.net/cpp/html/2242.html 这个网站最近看了一下,对于基本语法解释概括的相对全面,如同重新练习一遍OC似的,挺全面的,谢谢 ...

  8. swift基础语法(四) 函数、闭包(Closures)

    //函数基本定义 func 函数名(参数名:参数类型=默认值) ->返回值类型{代码块} //无参无返回值函数 func hsmin(){ } //单参无返回值函数 func prin(st:S ...

  9. Swift基础语法(二)

    操作符 swift中运算符基本基础于c,下面我就给大家白话白话那些被优化过的运算符们 //加号减号的妙用 var a= var b= -a//此时b=-1 var c = +b//此时 c=-1 va ...

随机推荐

  1. requests+正则爬取豆瓣图书

    #requests+正则爬取豆瓣图书 import requests import re def get_html(url): headers = {'User-Agent':'Mozilla/5.0 ...

  2. Maven 本地仓库明明有jar包,pom文件还是报错解决办法

    方法一: 找到出错的jar包文件位置,删掉_maven.repositories文件 方法二: maven中的本地仓库的index索引没有更新导致 解决方案: 在eclipse中打开菜单 window ...

  3. WPF Command

    使用CustomControl时绑定Command用法 C# Part public static RoutedUICommand ClearCommand { get; private set; } ...

  4. QT-第一个程序 Hello QT , 以及QT creator介绍

    第一个程序 - Hello QT 首先写main.cpp: #include <QApplication> #include <QMainWindow> #include &l ...

  5. MyBatis基础学习笔记--摘录

    1.MyBatis是什么? MyBatis源自于IBatis,是一个持久层框架,封装了jdbc操作数据库的过程,使得开发者只用关心sql语句,无需关心驱动加载.连接,创建statement,手动设置参 ...

  6. C#之FTP上传下载(二)

    这个类几乎包含了对FTP常用的方法,有不对的地方,欢迎批评指正 public class FtpClient { #region 构造函数 /// <summary> /// 创建FTP工 ...

  7. 关于装双系统Ubantu16.04+Win10引导问题

    1.装完双系统,必定会遇到时间不一致的问题解决问题如下 sudo apt-get install ntpdate sudo ntpdate time.windows.com sudo hwclock ...

  8. [SDOI 2011]计算器

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

  9. [NOI 2011]道路修建

    Description 在 W 星球上有 n 个国家.为了各自国家的经济发展,他们决定在各个国家 之间建设双向道路使得国家之间连通.但是每个国家的国王都很吝啬,他们只愿 意修建恰好 n – 1条双向道 ...

  10. NOIP 2007树网的核

    题目描述 设T=(V, E, W) 是一个无圈且连通的无向图(也称为无根树),每条边到有正整数的权,我们称T为树网(treebetwork),其中V,E分别表示结点与边的集合,W表示各边长度的集合,并 ...