swift3.0:CoreData的使用

1、介紹數據庫

CoreData不像slqite3那樣編寫代碼繁瑣,同時避免了使用了SQL語句的麻煩,也能夠迴避使用C語言的語法,下降了iOS開發的技術門檻。swift

CoreData可下降開發成本,提升代碼質量。它是一個徹底面向對象的API,可以合理管理內存,負責在數據庫中存儲數據,底層也是由相似app

於SQL的技術實現的。CoreData是持久化存儲的最佳方式,數據最終的存儲類型能夠是SQLite數據庫、XML、二進制、內存或自定義數據類型ide

它和SQLite的區別是:只能取出整個實體記錄,而後分離,以後才能獲得實體的某個屬性。工具

 

2、注意fetch

Swift3.0中CoreData使用有了很大的變更,以下:spa

一、生成的AppDelegate類中關於CoreData的代碼更少了code

二、建立Entity實體後,再建立對應的類,找不到NSManageredObject這個文件,解決辦法以下操做orm

(1)建立實體,添加屬性對象

(2)建立對相應的類,只有Data Model和Mapping Model,卻找不到NSManageedObject

(3)從工具欄Editor建立NSManagedObject

 

三、建立出的對應得實體類是分類

 

 

3、好了,建立完畢後,如今開始進行CoreData的操做了,這裏我建立了工具類HandleCoreData,專門用來操做CoreData的,提供類方法。

(1)插入數據

//一、插入數據的具體操做以下
    /*
     * 經過AppDelegate單利來獲取管理的數據上下文對象,操做實際內容
     * 經過NSEntityDescription.insertNewObjectForEntityForName方法建立實體對象
     * 給實體對象賦值
     * 經過saveContext()保存實體對象
     */
    class func insertData(){
        
        //獲取數據上下文對象
        let app = UIApplication.shared.delegate as! AppDelegate
        let context = app.persistentContainer.viewContext
        
        //建立user對象
        let EntityName = "User"
        let oneUser = NSEntityDescription.insertNewObject(forEntityName: EntityName, into:context) as! User
        
        //對象賦值
        oneUser.userID = 2
        oneUser.userEmail = "12345@163.com"
        oneUser.userPwd = "123456"
        
        //保存
        app.saveContext()
    }

(2)查詢數據

//二、查詢數據的具體操做以下
    /*
     * 利用NSFetchRequest方法來聲明數據的請求,至關於查詢語句
     * 利用NSEntityDescription.entityForName方法聲明一個實體結構,至關於表格結構
     * 利用NSPredicate建立一個查詢條件,並設置請求的查詢條件
     * 經過context.fetch執行查詢操做
     * 使用查詢出來的數據
     */
    class func queryData(){
        
        //獲取數據上下文對象
        let app = UIApplication.shared.delegate as! AppDelegate
        let context = app.persistentContainer.viewContext
        
        //聲明數據的請求
        let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest()
        fetchRequest.fetchLimit = 10  //限制查詢結果的數量
        fetchRequest.fetchOffset = 0  //查詢的偏移量
        
        //聲明一個實體結構
        let EntityName = "User"
        let entity:NSEntityDescription? = NSEntityDescription.entity(forEntityName: EntityName, in: context)
        fetchRequest.entity = entity
        
        //設置查詢條件
        let predicate = NSPredicate.init(format: "userID = '2'", "")
        fetchRequest.predicate = predicate
        
        //查詢操做
        do{
            let fetchedObjects = try context.fetch(fetchRequest) as! [User]
        
            //遍歷查詢的結果
            for info:User in fetchedObjects{
                print("userID = \(info.userID)")
                print("userEmail = \(info.userEmail)")
                print("userPwd = \(info.userPwd)")
                print("+++++++++++++++++++++++++")
            }
        }catch {
            let nserror = error as NSError
            fatalError("查詢錯誤: \(nserror), \(nserror.userInfo)")
        }
    }

(3)修改數據

//三、修改數據的具體操做以下
    /*
     * 利用NSFetchRequest方法來聲明數據的請求,至關於查詢語句
     * 利用NSEntityDescription.entityForName方法聲明一個實體結構,至關於表格結構
     * 利用NSPredicate建立一個查詢條件,並設置請求的查詢條件
     * 經過context.fetch執行查詢操做
     * 將查詢出來的數據進行修改,也即進行賦新值
     * 經過saveContext()保存修改後的實體對象
     */
    class func updateData(){
        
        //獲取數據上下文對象
        let app = UIApplication.shared.delegate as! AppDelegate
        let context = app.persistentContainer.viewContext
        
        //聲明數據的請求
        let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest()
        fetchRequest.fetchLimit = 10  //限制查詢結果的數量
        fetchRequest.fetchOffset = 0  //查詢的偏移量
        
        //聲明一個實體結構
        let EntityName = "User"
        let entity:NSEntityDescription? = NSEntityDescription.entity(forEntityName: EntityName, in: context)
        fetchRequest.entity = entity
        
        //設置查詢條件
        let predicate = NSPredicate.init(format: "userID = '2'", "")
        fetchRequest.predicate = predicate
        
        //查詢操做
        do{
            let fetchedObjects = try context.fetch(fetchRequest) as! [User]
            
            //遍歷查詢的結果
            for info:User in fetchedObjects{
                //修改郵箱
                info.userEmail = "xyq@163.com"
                
                //從新保存
                app.saveContext()
            }
        }catch {
            let nserror = error as NSError
            fatalError("查詢錯誤: \(nserror), \(nserror.userInfo)")
        }
    }

(4)刪除數據

//四、刪除數據的具體操做以下
    /*
     * 利用NSFetchRequest方法來聲明數據的請求,至關於查詢語句
     * 利用NSEntityDescription.entityForName方法聲明一個實體結構,至關於表格結構
     * 利用NSPredicate建立一個查詢條件,並設置請求的查詢條件
     * 經過context.fetch執行查詢操做
     * 經過context.delete刪除查詢出來的某一個對象
     * 經過saveContext()保存修改後的實體對象
     */
    class func deleteData(){
        
        //獲取數據上下文對象
        let app = UIApplication.shared.delegate as! AppDelegate
        let context = app.persistentContainer.viewContext
        
        //聲明數據的請求
        let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest()
        fetchRequest.fetchLimit = 10  //限制查詢結果的數量
        fetchRequest.fetchOffset = 0  //查詢的偏移量
        
        //聲明一個實體結構
        let EntityName = "User"
        let entity:NSEntityDescription? = NSEntityDescription.entity(forEntityName: EntityName, in: context)
        fetchRequest.entity = entity
        
        //設置查詢條件
        let predicate = NSPredicate.init(format: "userID = '2'", "")
        fetchRequest.predicate = predicate
        
        //查詢操做
        do{
            let fetchedObjects = try context.fetch(fetchRequest) as! [User]
            
            //遍歷查詢的結果
            for info:User in fetchedObjects{
                //刪除對象
                context.delete(info)
                
                //從新保存
                app.saveContext()
            }
        }catch {
            let nserror = error as NSError
            fatalError("查詢錯誤: \(nserror), \(nserror.userInfo)")
        }
    }

 

操做CoreData完整的代碼以下:

//
//  HandleCoreData.swift
//  XYQCoreData
//
//  Created by 夏遠全 on 2017/2/25.
//  Copyright © 2017年 夏遠全. All rights reserved.
//

import UIKit
import CoreData

//User對象建立成功以後,接下來就是經過對象來使用CoreData了
class HandleCoreData: NSObject {

    //一、插入數據的具體操做以下
    /*
     * 經過AppDelegate單利來獲取管理的數據上下文對象,操做實際內容
     * 經過NSEntityDescription.insertNewObjectForEntityForName方法建立實體對象
     * 給實體對象賦值
     * 經過saveContext()保存實體對象
     */
    class func insertData(){
        
        //獲取數據上下文對象
        let app = UIApplication.shared.delegate as! AppDelegate
        let context = app.persistentContainer.viewContext
        
        //建立user對象
        let EntityName = "User"
        let oneUser = NSEntityDescription.insertNewObject(forEntityName: EntityName, into:context) as! User
        
        //對象賦值
        oneUser.userID = 2
        oneUser.userEmail = "12345@163.com"
        oneUser.userPwd = "123456"
        
        //保存
        app.saveContext()
    }
    
    
    //二、查詢數據的具體操做以下
    /*
     * 利用NSFetchRequest方法來聲明數據的請求,至關於查詢語句
     * 利用NSEntityDescription.entityForName方法聲明一個實體結構,至關於表格結構
     * 利用NSPredicate建立一個查詢條件,並設置請求的查詢條件
     * 經過context.fetch執行查詢操做
     * 使用查詢出來的數據
     */
    class func queryData(){
        
        //獲取數據上下文對象
        let app = UIApplication.shared.delegate as! AppDelegate
        let context = app.persistentContainer.viewContext
        
        //聲明數據的請求
        let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest()
        fetchRequest.fetchLimit = 10  //限制查詢結果的數量
        fetchRequest.fetchOffset = 0  //查詢的偏移量
        
        //聲明一個實體結構
        let EntityName = "User"
        let entity:NSEntityDescription? = NSEntityDescription.entity(forEntityName: EntityName, in: context)
        fetchRequest.entity = entity
        
        //設置查詢條件
        let predicate = NSPredicate.init(format: "userID = '2'", "")
        fetchRequest.predicate = predicate
        
        //查詢操做
        do{
            let fetchedObjects = try context.fetch(fetchRequest) as! [User]
        
            //遍歷查詢的結果
            for info:User in fetchedObjects{
                print("userID = \(info.userID)")
                print("userEmail = \(info.userEmail)")
                print("userPwd = \(info.userPwd)")
                print("+++++++++++++++++++++++++")
            }
        }catch {
            let nserror = error as NSError
            fatalError("查詢錯誤: \(nserror), \(nserror.userInfo)")
        }
    }
    
    
    //三、修改數據的具體操做以下
    /*
     * 利用NSFetchRequest方法來聲明數據的請求,至關於查詢語句
     * 利用NSEntityDescription.entityForName方法聲明一個實體結構,至關於表格結構
     * 利用NSPredicate建立一個查詢條件,並設置請求的查詢條件
     * 經過context.fetch執行查詢操做
     * 將查詢出來的數據進行修改,也即進行賦新值
     * 經過saveContext()保存修改後的實體對象
     */
    class func updateData(){
        
        //獲取數據上下文對象
        let app = UIApplication.shared.delegate as! AppDelegate
        let context = app.persistentContainer.viewContext
        
        //聲明數據的請求
        let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest()
        fetchRequest.fetchLimit = 10  //限制查詢結果的數量
        fetchRequest.fetchOffset = 0  //查詢的偏移量
        
        //聲明一個實體結構
        let EntityName = "User"
        let entity:NSEntityDescription? = NSEntityDescription.entity(forEntityName: EntityName, in: context)
        fetchRequest.entity = entity
        
        //設置查詢條件
        let predicate = NSPredicate.init(format: "userID = '2'", "")
        fetchRequest.predicate = predicate
        
        //查詢操做
        do{
            let fetchedObjects = try context.fetch(fetchRequest) as! [User]
            
            //遍歷查詢的結果
            for info:User in fetchedObjects{
                //修改郵箱
                info.userEmail = "xyq@163.com"
                
                //從新保存
                app.saveContext()
            }
        }catch {
            let nserror = error as NSError
            fatalError("查詢錯誤: \(nserror), \(nserror.userInfo)")
        }
    }

    
    
    //四、刪除數據的具體操做以下
    /*
     * 利用NSFetchRequest方法來聲明數據的請求,至關於查詢語句
     * 利用NSEntityDescription.entityForName方法聲明一個實體結構,至關於表格結構
     * 利用NSPredicate建立一個查詢條件,並設置請求的查詢條件
     * 經過context.fetch執行查詢操做
     * 經過context.delete刪除查詢出來的某一個對象
     * 經過saveContext()保存修改後的實體對象
     */
    class func deleteData(){
        
        //獲取數據上下文對象
        let app = UIApplication.shared.delegate as! AppDelegate
        let context = app.persistentContainer.viewContext
        
        //聲明數據的請求
        let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest()
        fetchRequest.fetchLimit = 10  //限制查詢結果的數量
        fetchRequest.fetchOffset = 0  //查詢的偏移量
        
        //聲明一個實體結構
        let EntityName = "User"
        let entity:NSEntityDescription? = NSEntityDescription.entity(forEntityName: EntityName, in: context)
        fetchRequest.entity = entity
        
        //設置查詢條件
        let predicate = NSPredicate.init(format: "userID = '2'", "")
        fetchRequest.predicate = predicate
        
        //查詢操做
        do{
            let fetchedObjects = try context.fetch(fetchRequest) as! [User]
            
            //遍歷查詢的結果
            for info:User in fetchedObjects{
                //刪除對象
                context.delete(info)
                
                //從新保存
                app.saveContext()
            }
        }catch {
            let nserror = error as NSError
            fatalError("查詢錯誤: \(nserror), \(nserror.userInfo)")
        }
    }
}
View Code
相關文章
相關標籤/搜索