ios開發學習筆記--資料持久化之Core Data

來源:互聯網
上載者:User

標籤:

資料持久化之CoreDate

一.     Core Data簡介

Core Data是蘋果公司為了實現資料持久化提供的一個架構,而不是一個資料庫,提供對象—關係映射【ORM】的功能(將對象轉化為資料,也能將儲存在資料庫的資料還原為對象)。

雖然底層操作與SQLite相似,但是並不直接寫SQL語句,而且只能整個取出實體記錄,然後分解之後才能得到某個屬性。

Core Data能儲存的類型:SQLite資料庫、XML、二進位、自訂資料類型

一般情況下,Core Data的資料存在沙箱下的Document下,可以使用maseSQlite查看

Core Data關鍵類

 

                  NSManagedObjectModel(被管理的物件模型)

資料庫所有表格或資料結構,包含各實體的定義資訊

作用:添加實體的屬性,建立屬性之間的關係

操作方法:視圖編輯器,或代碼

 

                        NSManagedObjectContext(被管理的物件內容)

操作實際內容(操作持久層)

作用:插入,更新,查詢,刪除資料

 

                        NSManagedObject(被管理的資料對象)

相當於資料庫中的一條記錄

 

                        NSPersistentStoreCoordinator(持久化儲存協調器)

相當於資料庫的連接器

作用:設定資料存放區的名字,位置,儲存方式,和儲存時機

 

                        NSFetchRequest(擷取資料的請求)

相當於資料庫的查詢語句

 

                        NSPredicate(謂詞)

查詢資料的過濾條件

 

                        NSEntityDescription(實體描述)

對實體結構的描述,用於建立對象

關鍵詞:實體:Entity(相當於表,首字母大寫)  屬性:Attrubute(相當於欄位,首字母小寫)關聯:表與表之間可以關聯

 

Q:如果需要儲存圖片附件怎麼辦?

A:先將附件存起來,然後存地址到資料表中

二.     Core Data使用配置

要使用CoreDate必須先配置,最好是在建立工程的使用就選擇Use Core Data,將省去很多配置代碼,可以使用可視化配置,也可以使用代碼建立。

主要步驟為:

1.建立工程時選擇Use Core Data 

2.建立實體(設定表屬性和關聯)

配置詳情見::宏創學院?CoreData(一) —簡介

三.     CoreData具體使用

最終要的是獲得上下文NSManagedObjectContext,通過它實現增刪改查,實際開發中記得將資料將這些功能放在不同的函數中。

//使用CoreData    func useCoreData(){         //存放資料在沙箱的document下        // 擷取管理資料的上下文(在建立工程時選擇使用Use Core Data才會方便實現下面代碼,如果沒有選擇,必須代碼實現配置【自行百度】)        let app = UIApplication.sharedApplication().delegate as! AppDelegate        let context = app.managedObjectContext        // *插入  通過實體建立對象        var user = NSEntityDescription.insertNewObjectForEntityForName("Users", inManagedObjectContext: context) as! Users//為什要加as! Users?因為不加就會返回的是MamageObject        // 操作對象        user.id=1        user.name = "Jom"        user.age = 21        //*儲存資料(完成插入)        do {            try context.save()        }catch is NSError{            print("儲存失敗")        }        // *查詢操作        var fetchRequest = NSFetchRequest(entityName: "Users")//聲明實體請求(注意實體名為首大寫)【fetch:取得】        //設定查詢條件        fetchRequest.predicate = NSPredicate(format: "id = '1' AND name='Jom'" )//多條件尋找,還可以模糊尋找        let result = try! context.executeFetchRequest(fetchRequest) as! [Users]//傳回值為數組,如果沒有查詢到就會返回空數組            //let fetchedEmployees = try context.executeFetchRequest(fetchRequest) as! [Users]//傳回值為數組 這樣算是全部查詢吧        do{            let result = try context.executeFetchRequest(fetchRequest) as! [Users]            print("數量為",result.count) ///【重要】根據這個判斷是否尋找到,才進行修改或刪除,不讓空數組操縱會出錯        }catch is NSError{            print("沒有查尋到")        }        defer{ print("查詢結果為:")}        //*修改(在查詢的基礎上,對查詢到的對象進行修改,然後儲存即可)        if result.count==0 {print("無查詢值,無法修改")}//原來為Tom  //出過錯,因為沒有查尋到,直接對一個空數組賦值,導致程式終止,建以後這種情況判斷是否為空白先。        else{            print("可以修改")            result[0].id=2        }        do{ try context.save()//實際中應捕獲異常        }catch{            print("修改失敗")        }        //刪除資料(也是在尋找到的基礎上,刪除,在儲存一次就會)        if result.count==0 {print("無查詢值,無法修改")}//原來為Tom  //出過錯,因為沒有查尋到,直接對一個空數組賦值,導致程式終止,建以後這種情況判斷是否為空白先。        else{            print("可以刪除")            context.deleteObject(result[0])        }        try! context.save()    }

 

四、使用NSFetchedResultsController

在開發過程中,可能會使用CoreData在表格(table)中顯示,蘋果公司為了最佳化記憶體,特意設計了這個控制器,提供啊程式效能

在控制器中使用的時候一般是遵循它的NSFetchedResultsDelegate協議,匯入import CoreData,以及匯入實體就可以自行建立NSFetchedResultsController(類似一個方法)

 詳細使用請參考:http://www.starming.com/index.php?v=index&view=30

官網文檔;NSFetchedResultsController Class Reference

NSFetchedResultsControllerDelegate Protect Reference

官網文檔:CoreData Programming Guide

introduction to Core Data Reference Collection <重點>




ios開發學習筆記--資料持久化之Core Data

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.