Core Data
SQLite資料庫是預設作為Core data的儲存區.
一種以物件導向方式, 讓使用者跟資料庫(或者是其他永續性儲存器)互動的框架. 因此使用Core Data 只要將你App中的物件與資料庫中的表格相對應即可, 甚至不需要瞭解SQL.
Core Data Stack
Xcode:
第一個實體(Entity,即table)。點選下方的 “Add Entity”,在左邊欄的會出現新的 “Entity” 項目.
新增這個 Product entity 的屬性(Attirbutes),點選 Attributes 欄位下方的 “+” (或下方的 “Add Attribute” 也可以)即可新增。
再來要讓程式碼中可以使用這個 Entity,我們要建立一個 Product 類別,並且繼承 NSManagedObject。XCode 可以幫我們自動產生,在選單列中選擇 Editor > Create NSManagedObject Subclass…:
接下來就一連串的Next及Create, 最後就會產生下列的檔案. 而這四個檔案就是用來存取Core Data資料的關鍵檔案.
單箭頭跟雙箭頭的差異在於”Relationship”, 一對多 or 多對多的概念.
存取Core Data資料
第一步先import剛剛建立的.h跟.m 檔案.
存資料可以透過
[self.managedObjectContext save:nil];
要抓取資料時, 必須先建立fetch request, 再指定這個fetch request要從哪個entity取出資料.
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Album"];
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];
NSError *error = nil;
NSArray *fetchedAlbums = [[PACoreDataHelper managedObjectContext] executeFetchRequest:fetchRequest error:&error];
刪除資料
[[self.photo managedObjectContext] deleteObject:self.photo];
Core Data error
當遇到底下的Error時, 解決辦法就是delete the app in iOS simulator and run it again.
returned error Error Domain=NSCocoaErrorDomain Code=134100 “The operation couldn’t be completed. (Cocoa error 134100.)” UserInfo=0x7fdc09663080 {metadata={ NSPersistenceFrameworkVersion = 519; NSStoreModelVersionHashes = { TODOITEM = <222b8d5c 4aad84a8 08eb331e 50cd9b02 ed5eed35 ee67488b 069ff634 799badb7>; }; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( “” ); NSStoreType = SQLite; NSStoreUUID = “26066907-B092-491B-BB89-BE8CC6B2B845”; “_NSAutoVacuumLevel” = 2; }, reason=The model used to open the store is incompatible with the one used to create the store} with userInfo dictionary {
NSFetchRequest
參考網址:
http://ikevin.tw/?p=541
http://useyourloaf.com/blog/uialertcontroller-changes-in-ios-8.html
沒有留言:
張貼留言