你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS App開辟中Core Data框架根本的數據治理功效小結

iOS App開辟中Core Data框架根本的數據治理功效小結

編輯:IOS開發綜合

1、作甚CoreData
CoreData是一個專門用來治理數據的框架,其在機能與書寫便利上都有很年夜的優勢,在數據庫治理方面,apple激烈推舉開辟者應用CoreData框架,在apple的官方文檔中稱,應用CoreData框架可以削減開辟者50%——70%的代碼量,這固然有些誇大,但因而可知,CoreData切實其實非常壯大。

2、設計數據模子
在IOS開辟中,經常應用SQL數據庫對年夜量的表構造數據停止處置,然則SQL有一個非常顯著的缺點,關於慣例數據模子的表,其處置起來是沒成績的,例如一個班級表,個中每條數據中有班級稱號,人數如許的屬性,一個先生表,個中每條數據有先生的姓名,性別,年紀如許的屬性。然則假如要在表與表之間樹立接洽,自界說對象與自界說對象之間發生附屬關系,應用SQL處置起來就非常費事了,例如假如這個班級表中有一個班長的屬性,這個屬性是一個先生類型。
1.創立實體類型及其屬性
應用Xcode創立一個工程,在工程中新建一個文件,選擇Core Data分類中的DataModel創立,以下圖:

201662393010769.png (732×519)

這時候在Xcode的文件導航區會湧現一個以xcdatamodeld為擴大名的文件,這個文件就是數據模子文件,點擊Add Entity按鈕添加一個實體類型,取名為SchoolClass,為這個類型添加兩個屬性,分離為名字name和先生數目stuNum,以下圖:

201662393043714.png (885×899)

2.對實體類型停止設置
在Xcode右邊的對象欄中可以對實體類型停止一些設置,選中一個實體類型,以下圖:

201662393110376.png (259×571)

Name設置實體類型的稱號,Abstract Entity設置能否是籠統實體,假如勾選,則此實體不克不及被實例化,只能被繼續,相似於籠統類,好比界說工資一個實體類型,在界說繼續於人實體類型的先生、先生等來停止實例化。Parent Entity用來選擇父類實體,Class用於設置對應的類的。

3.在實體對象之間樹立關系
再創立一個先生類實體Student,添加name和age兩個屬性。選中SchoolClass,在個中的Relationships模塊中點擊+號,來添加一個關系,以下圖:

201662393139323.png (880×490)

這時候,SchoolClass實體類型中就有了一個Student類型的班長屬性。假如切換一下編纂作風,可以加倍清楚的看到實體類型之間的關系,以下圖:

201662393202625.png (882×871)

4.對屬性和關系停止設置
選中一個屬性或許關系,在右邊的對象欄中可以對屬性停止一些設置,以下圖:

201662393221365.png (260×544)

name設置屬性的名字,Optional類型代表可選,即在實例化對象時可以賦值也能夠不賦值。Attribute設置屬性的數據類型,Default Value設置數據的默許值。
2、數據模子治理類NSManagedObjectModel

經由過程NSManagedObjectModel,可以將創立的數據模子文件讀取為模子治理類對象,應用以下辦法:
//獲得.xcdatamodeld文件url
NSURL *modelUrl = [[NSBundle mainBundle]URLForResource:@"Model" withExtension:@"momd"];
//讀取文件
NSManagedObjectModel * mom = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelUrl];
個中還有一些屬性和辦法停止數據模子的治理:

//將多個數據模子治理文件停止歸並
+ (nullable NSManagedObjectModel *)mergedModelFromBundles:(nullable NSArray<NSBundle *> *)bundles; 
//將多個數據模子治理類對象停止歸並
+ (nullable NSManagedObjectModel *)modelByMergingModels:(nullable NSArray<NSManagedObjectModel *> *)models;
//寄存數據中一切實體模子的字典 字典中是實體名和實體描寫對象
@property (readonly, copy) NSDictionary<NSString *, NSEntityDescription *> *entitiesByName;
//寄存數據中一切實體描寫對象
@property (strong) NSArray<NSEntityDescription *> *entities;
//前往一切可用的設置裝備擺設稱號
@property (readonly, strong) NSArray<NSString *> *configurations;
//獲得聯系關系某個設置裝備擺設的一切實體
- (nullable NSArray<NSEntityDescription *> *)entitiesForConfiguration:(nullable NSString *)configuration;
//為某個實體聯系關系設置裝備擺設
- (void)setEntities:(NSArray<NSEntityDescription *> *)entities forConfiguration:(NSString *)configuration;
//創立要求模板
- (void)setFetchRequestTemplate:(nullable NSFetchRequest *)fetchRequestTemplate forName:(NSString *)name;
//獲得要求模板
- (nullable NSFetchRequest *)fetchRequestTemplateForName:(NSString *)name;
關於實體描寫對象NSEntityDescription:

實體相似於數據庫中的表構造,例如前次我們創立的班級實體模子,一個實體模子中可以添加很多屬性與關系,NSEntityDescription對象中寄存這些信息,經常使用以下:

//實體地點的模子治理對象
@property (readonly, assign) NSManagedObjectModel *managedObjectModel;
//實體地點的模子治理對象的稱號
@property (null_resettable, copy) NSString *managedObjectClassName;
//實體名
@property (nullable, copy) NSString *name;
//設置能否是籠統實體
@property (getter=isAbstract) BOOL abstract;
//子類實體字典
@property (readonly, copy) NSDictionary<NSString *, NSEntityDescription *> *subentitiesByName;
//一切子類實體對象數組
@property (strong) NSArray<NSEntityDescription *> *subentities;
//父類實體
@property (nullable, readonly, assign) NSEntityDescription *superentity;
//一切屬性字典
@property (readonly, copy) NSDictionary<NSString *, __kindof NSPropertyDescription *> *propertiesByName;
//一切屬性數組
@property (strong) NSArray<__kindof NSPropertyDescription *> *properties;
//一切常類型屬性
@property (readonly, copy) NSDictionary<NSString *, NSAttributeDescription *> *attributesByName;
//一切關系
@property (readonly, copy) NSDictionary<NSString *, NSRelationshipDescription *> *relationshipsByName;
//某個實體類型的一切關系
- (NSArray<NSRelationshipDescription *> *)relationshipsWithDestinationEntity:(NSEntityDescription *)entity;
//斷定能否是某種實體
- (BOOL)isKindOfEntity:(NSEntityDescription *)entity;
NSPropertyDescription類是數據模子屬性的父類,NSAttributeDescription和NSRelationshipDescription都是繼續於NSPropertyDescription類,NSAttributeDescription描寫正常類型的屬性,NSRelationshipDescription用於描寫自界說類型的關系。

3、耐久化存儲調和者類NSPersistentStoreCoordinator

NSPersistentStoreCoordinator樹立數據模子與當地文件或數據庫之間的接洽,經由過程它將當地數據讀入內存或許將修正過的暫時數據停止耐久化的保留。其初始化與鏈接數據耐久化吸收對象辦法以下:

//經由過程數據模子治理對象停止初始化
- (instancetype)initWithManagedObjectModel:(NSManagedObjectModel *)model;
//添加一個耐久化的數據吸收對象
- (nullable __kindof NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(nullable NSString *)configuration URL:(nullable NSURL *)storeURL options:(nullable NSDictionary *)options error:(NSError **)error;
//移除一個耐久化的數據吸收對象
- (BOOL)removePersistentStore:(NSPersistentStore *)store error:(NSError **)error;

4、數據對象治理高低文NSManagedObjectContext

NSManagedObjectContext是停止數據治理的焦點類,我們經由過程這個類來停止數據的增刪改查等操作。個中經常使用辦法以下:

//初始化辦法 經由過程一個並發類型停止初始化 參數列舉以下:
/*
typedef NS_ENUM(NSUInteger, NSManagedObjectContextConcurrencyType) {
    NSPrivateQueueConcurrencyType  = 0x01,//高低文對象與公有隊列聯系關系
    NSMainQueueConcurrencyType   = 0x02//高低文對象與客隊列聯系關系
};
*/
- (instancetype)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct;
//異步履行block
- (void)performBlock:(void (^)())block;
//同步履行block
- (void)performBlockAndWait:(void (^)())block;
//聯系關系數據耐久化對象
@property (nullable, strong) NSPersistentStoreCoordinator *persistentStoreCoordinator;
//能否有未提交的更改
@property (nonatomic, readonly) BOOL hasChanges;
//停止查詢數據要求
- (nullable NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error;
//停止查詢數據條數要求
- (NSUInteger) countForFetchRequest: (NSFetchRequest *)request error: (NSError **)error ;
//拔出元素
- (void)insertObject:(NSManagedObject *)object;
//刪除元素
- (void)deleteObject:(NSManagedObject *)object;
//回滾一步操作
- (void)undo;
//清晰緩存
- (void)reset;
//復原數據
- (void)rollback;
//提交保留數據
- (BOOL)save:(NSError **)error;

【iOS App開辟中Core Data框架根本的數據治理功效小結】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved