表格結構:NSEntityDescription 相當於資料庫中的一個表,TA描述一種抽象資料類型eg://+insertNewObjectForEntityForName:inManagedObjectContext: Factory 方法,根據給定的 Entity 描述,產生相應的 NSManagedObject 對象,並插入到 ManagedObjectContext 中Student *student = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:managedObjectContext];//通過上面的代碼可以得到student這個表的執行個體,然後可以使用這個執行個體去為表中的屬性賦值student.name = @"like"; student.age = 12;應用程式的資料模型,資料庫中所有表格和他們之間的聯絡:NSManagedObjectModel//系統會讀取model檔案來聲稱NSManagedObjectModel對象,model :對於class,model稱之為 entity; 對於instant variable, model 稱之為propertymodel包含兩種property: attributes 和 relationships. attribute為單一資料型別,如一個字串,日期,數字NSManagedObjectModel * model = [self managedObjectModel];//擷取執行個體NSDictionary * entities = [model entitiesByName];//entitiesByName 得到所有的表的名字NSEntityDescription * entity = [entities valueForKey:@"Student"];//從裡面找出名為 Student 的表資料庫存放方式:NSPersistentStoreCoordinator //使用 Core Data document 類型的應用程式,通常會從磁碟上的資料文中中讀取或儲存資料,這寫底層的讀寫就由 Persistent Store Coordinator 來處理。一般我們無需與它直接打交道來讀寫檔案,Managed Object Context 在背後已經為我們調用 Persistent Store Coordinator 做了這部分工作資料庫操作:NSManagedObjectContext 被管理的物件內容(對資料直接操作)//可以通過TA去訪問底層的架構對象集合,這些對象集合統稱為持久化堆棧(persistence stack)——它在應用程式和外部資料儲存的對象之間提供訪問通道//Managed Object Context 的作用相當重要,對資料對象進行的操作都與它有關。當建立一個資料對象並插入 Managed Object Context 中,Managed Object Context 就開始跟蹤這個資料對象的一切變動,並在合適的時候提供對 undo/redo 的支援,或調用 Persistent Store Coordinato 將變化儲存到資料檔案中去//redo: 恢複已經提交的事務 undo: 復原操作,支援讀一致性,恢複失敗的交易//-executeFetchRequest: error:執行 Fetch Request 並返回所有匹配的資料對象NSFetchRequest * fetch = [[NSFetchRequest alloc] init];NSArray * results = [context executeFetchRequest:fetch error:nil];//擷取NSManagedObjectContext的執行個體//1.利用UIApplication代理擷取id delegate = [[UIApplication sharedApplication] delegate];self.managedObjectContext = [delegate managedObjectContext];//2.直接去建立執行個體NSManagedObjectContext *context = [self managedObjectContext];//利用getter方法來擷取查詢語句:NSPetchRequest 相當於select語句//Fetch Requests 相當於一個查詢語句,你必須指定要查詢的 Entity。我們通過 Fetch Requests 向 Managed Object Context 查詢合格資料對象,以 NSArray 形式返回查詢結果,如果我們沒有設定任何查詢條件,則返回該 Entity 的所有資料對象。我們可以使用謂詞來設定查詢條件,通常會將常用的 Fetch Requests 儲存到 dictionary 以重複利用NSPredicate * predicate = [NSPredicate predicateWithFormat:@"xx > %@", xx];//相當於select中的查詢條件NSSortDescriptor * sort = [[NSortDescriptor alloc] initWithKey:@"name"];//按照 name 來排序NSArray * sortDescriptors = [NSArray arrayWithObject: sort];// -setEntity:設定你要查詢的資料對象的類型(Entity)就是NSEntityDescription對象// -setPredicate:設定查詢條件// -setFetchLimit:設定最大查詢對象數目// -setSortDescriptors:設定查詢結果的排序方法// -setAffectedStores:設定可以在哪些資料存放區中查詢表格的記錄:NSManagedObject Core Data儲存的每個對象都繼承自NSManagedObject,我們可以得到TA的一個執行個體,用這個執行個體去為表中的屬性賦值eg:NSManagedObject *managedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:managedObjectContext];managedObject.name = @"like"; managedObject.age = 12;