持久化存儲方式可以是SQLite數據庫,也可以是XML文檔,甚至可以是直接以聶村作為持久化存儲設備(應用重啟時,數據就會丟失)
核心概念:
實體。 有CoreData管理(簡稱托管)的模型對象,必須是NSManagedObject類或其子類的實例
托管對象模型(NSManagedObjectModel):整個應用的所有實體以及實體之間的關聯關系。
核心API:
1.托管對象模型(NSManagedObjectModel)
2.持久化存儲協調器(NSPersistentStoreCoordinator)
3.托管對象上下文(NSmanagedObjectzContext) 該對象是CoreData的核心對象,應用程序對實體所做的增,刪,改,查操作都需要通過該對象來完成
4.實體描述(NSEntityDescription) 該對象代表了關于某個實體的描述信息,從某種成都來說,該對象相當于實體的抽象。
5.抓去清求(NSFetchRequest):該對象封裝了查詢實體的請求,包括程序需要查詢那些實體,查詢條件,排序規則等。抓取請求的內部結構。使用CoreData步驟:
1.創建NSManagedObjectModel對象來加載管理應用的托管對象模型
2.以NSManagedObjectModel對象為基礎,根據實際需要創建NSPersistentStoreCoordinator對象,該對象確定CoreData底層數據的存儲形式
3.NSManagedObjectModel對象為基礎,初始化NSManagedObjectContext,該對象是CoreData繼續你更能持久化訪問的核心對象
4.對于普通的增刪改操作,需要分別先新建實體,刪除實體,修改實體,然后調用NSManagedObjectContext對象的save:方法將這些修改保存到底層存儲設備
5.如果執行查詢,則需要先創建NSFetchRequest對象,在調用NSManagedObjectContext的executeFetchRequest:error:方法執行查詢,該方法返滬i 所有匹配條件的實體組成的NSArray
初始化CoreData
自動初始化:
在項目創建時,選中UseCoreData復選框,此時會完成所有CD必須資源的初始化
手動初始化:
1.創建空項目,添加CoreData.framework框架,新建的項目將只包含一個應用程序委托類,接下來逐步改造
2.添加一個實體模型文件 command+n-> ?CoreData類DataModel->xxx.xcdatamodeld
3.初始化CoreData應用必須的核心API對象 NSManagedObjectModel,NSPersistentStoreCoordinator,NSManagedObjectContext
這些核心API對象都屬于全局可用的對象,一般會在應用程序委托類中執行初始化
設計實體模型
實體可添加如下3各種屬性:
屬性(Attribute) 相當于實體對象的實例變量,紀錄該實體的狀態
關聯關系(Relationships) 定義實體之間的1:1 1:N,N:N關聯狀態
抓取屬性(FetchedProperties) 這是關聯關系的可選方法,抓取是塑形允許在獲取關聯實體時執行某個過濾條件
-(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;
//執行抓取數據的請求,返回符合條件的數據
}