最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS App開發(fā)中Core Data框架基本的數(shù)據(jù)管理功能小結(jié)

 更新時間:2016年06月23日 09:37:59   作者:琿少  
除了使用SQL關系型數(shù)據(jù)庫,我們還可以使用Xcode中提供的Core Data來進行表結(jié)構(gòu)數(shù)據(jù)處理,這里我們就來初步整理iOS App開發(fā)中Core Data框架基本的數(shù)據(jù)管理功能小結(jié):

一、何為CoreData
CoreData是一個專門用來管理數(shù)據(jù)的框架,其在性能與書寫方便上都有很大的優(yōu)勢,在數(shù)據(jù)庫管理方面,apple強烈推薦開發(fā)者使用CoreData框架,在apple的官方文檔中稱,使用CoreData框架可以減少開發(fā)者50%——70%的代碼量,這雖然有些夸張,但由此可見,CoreData的確十分強大。

二、設計數(shù)據(jù)模型
在iOS開發(fā)中,時常使用SQL數(shù)據(jù)庫對大量的表結(jié)構(gòu)數(shù)據(jù)進行處理,但是SQL有一個十分明顯的缺陷,對于常規(guī)數(shù)據(jù)模型的表,其處理起來是沒問題的,例如一個班級表,其中每條數(shù)據(jù)中有班級名稱,人數(shù)這樣的屬性,一個學生表,其中每條數(shù)據(jù)有學生的姓名,性別,年齡這樣的屬性。但是如果要在表與表之間建立聯(lián)系,自定義對象與自定義對象之間產(chǎn)生從屬關系,使用SQL處理起來就十分麻煩了,例如如果這個班級表中有一個班長的屬性,這個屬性是一個學生類型。
1.創(chuàng)建實體類型及其屬性
使用Xcode創(chuàng)建一個工程,在工程中新建一個文件,選擇Core Data分類中的DataModel創(chuàng)建,如下圖:

201662393010769.png (732×519)

這時在Xcode的文件導航區(qū)會出現(xiàn)一個以xcdatamodeld為擴展名的文件,這個文件就是數(shù)據(jù)模型文件,點擊Add Entity按鈕添加一個實體類型,取名為SchoolClass,為這個類型添加兩個屬性,分別為名字name和學生數(shù)量stuNum,如下圖:

201662393043714.png (885×899)

2.對實體類型進行設置
在Xcode右側(cè)的工具欄中可以對實體類型進行一些設置,選中一個實體類型,如下圖:

201662393110376.png (259×571)

Name設置實體類型的名稱,Abstract Entity設置是否是抽象實體,如果勾選,則此實體不能被實例化,只能被繼承,類似于抽象類,比如定義人為一個實體類型,在定義繼承于人實體類型的老師、學生等來進行實例化。Parent Entity用來選擇父類實體,Class用于設置對應的類的。

3.在實體對象之間建立關系
再創(chuàng)建一個學生類實體Student,添加name和age兩個屬性。選中SchoolClass,在其中的Relationships模塊中點擊+號,來添加一個關系,如下圖:

201662393139323.png (880×490)

這時,SchoolClass實體類型中就有了一個Student類型的班長屬性。如果切換一下編輯風格,可以更加清晰的看到實體類型之間的關系,如下圖:

201662393202625.png (882×871)

4.對屬性和關系進行設置
選中一個屬性或者關系,在右側(cè)的工具欄中可以對屬性進行一些設置,如下圖:

201662393221365.png (260×544)

name設置屬性的名字,Optional類型代表可選,即在實例化對象時可以賦值也可以不賦值。Attribute設置屬性的數(shù)據(jù)類型,Default Value設置數(shù)據(jù)的默認值。
二、數(shù)據(jù)模型管理類NSManagedObjectModel

通過NSManagedObjectModel,可以將創(chuàng)建的數(shù)據(jù)模型文件讀取為模型管理類對象,使用如下方法:
//獲取.xcdatamodeld文件url
NSURL *modelUrl = [[NSBundle mainBundle]URLForResource:@"Model" withExtension:@"momd"];
//讀取文件
NSManagedObjectModel * mom = [[NSManagedObjectModel alloc]initWithContentsOfURL:modelUrl];
其中還有一些屬性和方法進行數(shù)據(jù)模型的管理:

//將多個數(shù)據(jù)模型管理文件進行合并
+ (nullable NSManagedObjectModel *)mergedModelFromBundles:(nullable NSArray<NSBundle *> *)bundles; 
//將多個數(shù)據(jù)模型管理類對象進行合并
+ (nullable NSManagedObjectModel *)modelByMergingModels:(nullable NSArray<NSManagedObjectModel *> *)models;
//存放數(shù)據(jù)中所有實體模型的字典 字典中是實體名和實體描述對象
@property (readonly, copy) NSDictionary<NSString *, NSEntityDescription *> *entitiesByName;
//存放數(shù)據(jù)中所有實體描述對象
@property (strong) NSArray<NSEntityDescription *> *entities;
//返回所有可用的配置名稱
@property (readonly, strong) NSArray<NSString *> *configurations;
//獲取關聯(lián)某個配置的所有實體
- (nullable NSArray<NSEntityDescription *> *)entitiesForConfiguration:(nullable NSString *)configuration;
//為某個實體關聯(lián)配置
- (void)setEntities:(NSArray<NSEntityDescription *> *)entities forConfiguration:(NSString *)configuration;
//創(chuàng)建請求模板
- (void)setFetchRequestTemplate:(nullable NSFetchRequest *)fetchRequestTemplate forName:(NSString *)name;
//獲取請求模板
- (nullable NSFetchRequest *)fetchRequestTemplateForName:(NSString *)name;
關于實體描述對象NSEntityDescription:

實體類似于數(shù)據(jù)庫中的表結(jié)構(gòu),例如上次我們創(chuàng)建的班級實體模型,一個實體模型中可以添加許多屬性與關系,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;
//所有子類實體對象數(shù)組
@property (strong) NSArray<NSEntityDescription *> *subentities;
//父類實體
@property (nullable, readonly, assign) NSEntityDescription *superentity;
//所有屬性字典
@property (readonly, copy) NSDictionary<NSString *, __kindof NSPropertyDescription *> *propertiesByName;
//所有屬性數(shù)組
@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類是數(shù)據(jù)模型屬性的父類,NSAttributeDescription和NSRelationshipDescription都是繼承于NSPropertyDescription類,NSAttributeDescription描述正常類型的屬性,NSRelationshipDescription用于描述自定義類型的關系。

三、持久化存儲協(xié)調(diào)者類NSPersistentStoreCoordinator

NSPersistentStoreCoordinator建立數(shù)據(jù)模型與本地文件或數(shù)據(jù)庫之間的聯(lián)系,通過它將本地數(shù)據(jù)讀入內(nèi)存或者將修改過的臨時數(shù)據(jù)進行持久化的保存。其初始化與鏈接數(shù)據(jù)持久化接收對象方法如下:

//通過數(shù)據(jù)模型管理對象進行初始化
- (instancetype)initWithManagedObjectModel:(NSManagedObjectModel *)model;
//添加一個持久化的數(shù)據(jù)接收對象
- (nullable __kindof NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(nullable NSString *)configuration URL:(nullable NSURL *)storeURL options:(nullable NSDictionary *)options error:(NSError **)error;
//移除一個持久化的數(shù)據(jù)接收對象
- (BOOL)removePersistentStore:(NSPersistentStore *)store error:(NSError **)error;

四、數(shù)據(jù)對象管理上下文NSManagedObjectContext

NSManagedObjectContext是進行數(shù)據(jù)管理的核心類,我們通過這個類來進行數(shù)據(jù)的增刪改查等操作。其中常用方法如下:

//初始化方法 通過一個并發(fā)類型進行初始化 參數(shù)枚舉如下:
/*
typedef NS_ENUM(NSUInteger, NSManagedObjectContextConcurrencyType) {
    NSPrivateQueueConcurrencyType  = 0x01,//上下文對象與私有隊列關聯(lián)
    NSMainQueueConcurrencyType   = 0x02//上下文對象與主隊列關聯(lián)
};
*/
- (instancetype)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct;
//異步執(zhí)行block
- (void)performBlock:(void (^)())block;
//同步執(zhí)行block
- (void)performBlockAndWait:(void (^)())block;
//關聯(lián)數(shù)據(jù)持久化對象
@property (nullable, strong) NSPersistentStoreCoordinator *persistentStoreCoordinator;
//是否有未提交的更改
@property (nonatomic, readonly) BOOL hasChanges;
//進行查詢數(shù)據(jù)請求
- (nullable NSArray *)executeFetchRequest:(NSFetchRequest *)request error:(NSError **)error;
//進行查詢數(shù)據(jù)條數(shù)請求
- (NSUInteger) countForFetchRequest: (NSFetchRequest *)request error: (NSError **)error ;
//插入元素
- (void)insertObject:(NSManagedObject *)object;
//刪除元素
- (void)deleteObject:(NSManagedObject *)object;
//回滾一步操作
- (void)undo;
//清楚緩存
- (void)reset;
//還原數(shù)據(jù)
- (void)rollback;
//提交保存數(shù)據(jù)
- (BOOL)save:(NSError **)error;

相關文章

  • 在iOS開發(fā)的Quartz2D使用中實現(xiàn)圖片剪切和截屏功能

    在iOS開發(fā)的Quartz2D使用中實現(xiàn)圖片剪切和截屏功能

    這篇文章主要介紹了在iOS開發(fā)的Quartz2D使用中實現(xiàn)圖片剪切和截屏功能的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2015-12-12
  • iOS指紋識別的簡單應用

    iOS指紋識別的簡單應用

    這篇文章主要為大家詳細介紹了iOS指紋識別的簡單應用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 如何在IOS上使用ReplayKit與RTC

    如何在IOS上使用ReplayKit與RTC

    這篇文章主要介紹了如何在IOS上使用ReplayKit 與 RTC,對IOS音視頻感興趣的同學,一定要看一下
    2021-04-04
  • IOS 解決推送本地國際化 loc-key 本地化失敗的問題

    IOS 解決推送本地國際化 loc-key 本地化失敗的問題

    本文主要介紹IOS 推送國際化問題,在開發(fā) IOS 項目過程中對軟件的國際化有的項目需求是需要的,這里給大家一個示例,有需要的小伙伴可以參考下
    2016-07-07
  • iOS撥打電話的3種實現(xiàn)方式

    iOS撥打電話的3種實現(xiàn)方式

    這篇文章主要介紹了iOS撥打電話的3種實現(xiàn)方式 ,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • iOS簡單易用的GCD計時器的實現(xiàn)原理

    iOS簡單易用的GCD計時器的實現(xiàn)原理

    在日常開發(fā)中總會碰到需要計時器的功能,常見的定時器有NSTimer、GCD、CADisplayLink。網(wǎng)上也有很多的教程介紹三者的區(qū)別,今天主要講的是GCD這種方式使用以及封裝。感興趣的小伙伴們可以參考一下
    2018-11-11
  • IOS游戲開發(fā)之五子棋OC版

    IOS游戲開發(fā)之五子棋OC版

    五子棋是大家比較熟悉的一款小游戲,相信很多人用多種語言寫過五子棋小游戲,本文試著用OC實現(xiàn)了一下,在這里給大家分享一下。有需要的可以參考學習。
    2016-08-08
  • iOS開發(fā)中AVPlayer的簡單應用

    iOS開發(fā)中AVPlayer的簡單應用

    這篇文章主要介紹了iOS開發(fā)中AVPlayer的簡單應用,文中給出了簡單的介紹和示例代碼,相信對大家學習AVPlayer的應用具有一定的參考價值,需要的朋友們下面跟著小編來一起學習學習。
    2017-02-02
  • 淺談Xcode 開發(fā)工具 XCActionBar

    淺談Xcode 開發(fā)工具 XCActionBar

    本文主要給大家簡單講解了Xcode的開發(fā)工具 XCActionBar的介紹與使用方法,非常的全面實用,有需要的小伙伴可以參考下。
    2015-11-11
  • touchesBegan: withEvent: 不執(zhí)行解決

    touchesBegan: withEvent: 不執(zhí)行解決

    這篇文章主要介紹了touchesBegan: withEvent: 不執(zhí)行解決的相關資料,需要的朋友可以參考下
    2016-12-12

最新評論

晋宁县| 星座| 山西省| 崇明县| 陇南市| 阜阳市| 赣榆县| 赣榆县| 江永县| 新绛县| 榆树市| 洪雅县| 当涂县| 马龙县| 东乌| 天镇县| 辰溪县| 林芝县| 巴林左旗| 会宁县| 荔浦县| 昭觉县| 霍城县| 离岛区| 盖州市| 闻喜县| 巍山| 枞阳县| 武功县| 邻水| 永修县| 平南县| 英德市| 石阡县| 邹城市| 安溪县| 武邑县| 华蓥市| 鹿泉市| 石屏县| 延寿县|