CoreData

持久化存儲方式可以是SQLite數(shù)據(jù)庫,也可以是XML文檔,甚至可以是直接以聶村作為持久化存儲設備(應用重啟時,數(shù)據(jù)就會丟失)

核心概念:

實體。 有CoreData管理(簡稱托管)的模型對象,必須是NSManagedObject類或其子類的實例

托管對象模型(NSManagedObjectModel):整個應用的所有實體以及實體之間的關聯(lián)關系。

核心API:

1.托管對象模型(NSManagedObjectModel)

2.持久化存儲協(xié)調(diào)器(NSPersistentStoreCoordinator)

3.托管對象上下文(NSmanagedObjectzContext) 該對象是CoreData的核心對象,應用程序?qū)嶓w所做的增,刪,改,查操作都需要通過該對象來完成

4.實體描述(NSEntityDescription) 該對象代表了關于某個實體的描述信息,從某種成都來說,該對象相當于實體的抽象。

5.抓去清求(NSFetchRequest):該對象封裝了查詢實體的請求,包括程序需要查詢那些實體,查詢條件,排序規(guī)則等。抓取請求的內(nèi)部結構。使用CoreData步驟:


1.創(chuàng)建NSManagedObjectModel對象來加載管理應用的托管對象模型

2.以NSManagedObjectModel對象為基礎,根據(jù)實際需要創(chuàng)建NSPersistentStoreCoordinator對象,該對象確定CoreData底層數(shù)據(jù)的存儲形式

3.NSManagedObjectModel對象為基礎,初始化NSManagedObjectContext,該對象是CoreData繼續(xù)你更能持久化訪問的核心對象

4.對于普通的增刪改操作,需要分別先新建實體,刪除實體,修改實體,然后調(diào)用NSManagedObjectContext對象的save:方法將這些修改保存到底層存儲設備

5.如果執(zhí)行查詢,則需要先創(chuàng)建NSFetchRequest對象,在調(diào)用NSManagedObjectContext的executeFetchRequest:error:方法執(zhí)行查詢,該方法返滬i 所有匹配條件的實體組成的NSArray


初始化CoreData


自動初始化:

在項目創(chuàng)建時,選中UseCoreData復選框,此時會完成所有CD必須資源的初始化

手動初始化:

1.創(chuàng)建空項目,添加CoreData.framework框架,新建的項目將只包含一個應用程序委托類,接下來逐步改造

2.添加一個實體模型文件 command+n-> ?CoreData類DataModel->xxx.xcdatamodeld

3.初始化CoreData應用必須的核心API對象 NSManagedObjectModel,NSPersistentStoreCoordinator,NSManagedObjectContext

這些核心API對象都屬于全局可用的對象,一般會在應用程序委托類中執(zhí)行初始化


設計實體模型


實體可添加如下3各種屬性:

屬性(Attribute) 相當于實體對象的實例變量,紀錄該實體的狀態(tài)

關聯(lián)關系(Relationships) 定義實體之間的1:1 1:N,N:N關聯(lián)狀態(tài)

抓取屬性(FetchedProperties) 這是關聯(lián)關系的可選方法,抓取是塑形允許在獲取關聯(lián)實體時執(zhí)行某個過濾條件

-(void)addBookCoreData:(Book*)book{

AppDelegate* app=[UIApplicationsharedApplication].delegate;

BookEntity* book1=[NSEntityDescriptioninsertNewObjectForEntityForName:@"BookEntity"inManagedObjectContext:app.managedObjectContext];

book1.bookId=[NSNumbernumberWithInteger:book.ID];

book1.bookPrice=[NSNumbernumberWithDouble:book.price];

book1.name=book.name;

[app.managedObjectContextsave:nil];

}

-(void)alertBookCoreData:(BookEntity*)book{

AppDelegate* app=[UIApplicationsharedApplication].delegate;

BookEntity* newbook=[NSEntityDescriptioninsertNewObjectForEntityForName:@"BookEntity"inManagedObjectContext:app.managedObjectContext];

newbook=book;

[app.managedObjectContextsave:nil];

}

-(void)deleteBookCoreData:(BookEntity*)book{

AppDelegate* app=[UIApplicationsharedApplication].delegate;

[app.managedObjectContextdeleteObject:book];

[app.managedObjectContextsave:nil];

}

-(NSArray*)getAllBooksCoreData{

AppDelegate* app=[UIApplicationsharedApplication].delegate;

NSFetchRequest* request=[[NSFetchRequestalloc]init];

//? ? request.predicate=[NSPredicate predicateWithFormat:@""];

NSEntityDescription* entity=[NSEntityDescriptionentityForName:@"BookEntity"inManagedObjectContext:app.managedObjectContext];

[requestsetEntity:entity];

NSArray* arr=[[app.managedObjectContextexecuteFetchRequest:requesterror:nil]mutableCopy];

returnarr;

//執(zhí)行抓取數(shù)據(jù)的請求,返回符合條件的數(shù)據(jù)

}

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容