Core Data 學習筆記
做到現終於了解Coredata是怎樣的操作了,之前一直以為會跟ios上的操作不一樣,但是後來
看完了Apple官方文件,發現到Apple其實真得很不錯,從Mac到ios上的用法都大致相同,很
多地方其實可以用ios的一些原理,反推回去,不過還是有些許的部份是不同的。
在Mac上的Coredata,是標榜著"write less code",這可是這Coredata當時的發展目標,在Mac
上確實真的看到了,他真的要寫的code很少,幾乎是不太要寫到什麼代碼。很快就可以完成
一個資料庫的加入、移除、修改,這三大基本動作,就連關聯式資料庫的一些維護動作,他
也全都在背後全做好了。
到目前的階段大致上需要的功能都有了,接下來可以專心的想如何開發出Mac App了。
以下是基本操作的代碼
在這個測試檔中,使用的Entity Class就叫做"Entity",使用的Model也是叫做Entity,裡面只有
一個欄位就叫做"name",標記為紅色的部份就是需要自已替換上的部份。
- (IBAction)fetchRequest:(id)sender {//取出所有資料
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
NSLog(@"no data");
}
for (Entity *a in fetchedObjects) {
NSLog(@"%@",a.name);
}
}
///以下是刪除
- (IBAction)testRemove:(id)sender {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSArray *fetchedObjects = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
NSManagedObject *registroParaDeletar = [fetchedObjects objectAtIndex:1];
[[self managedObjectContext] deleteObject: registroParaDeletar];
[[self managedObjectContext] save:&error];//這行很重要,要執行這行,才會把變更後的資料寫入
}
把資料寫入這件事,其實困擾我好幾天,因為Mac上的Coredata當在介面上拉好相關的元件後,其實就可
以直接使用了,但是很其實的是在當按下新增資料的時候,都會先顯示一條空白的資料,必需要去點兩下
編輯內容,這筆資料才會有資訊,而這個操作習慣其實是很怪的,也很不順手,所以就一直在找,到底
如何可以在畫面上某個方塊中,打好資料,就可以直接把打好的資料寫到資料庫中,而不是先建立一個
空白再去點兩下編輯,才算完成。以下的代碼就是示範可以在畫面上的文字方塊就把資料打好,按下新增
時就直接把資料寫入資料庫。並且寫入成功後,就把文字方塊上的文字清除。
- (IBAction)testInsert:(id)sender {
Entity *object = [NSEntityDescription insertNewObjectForEntityForName:@"Entity"
inManagedObjectContext:[self managedObjectContext]];
[object setName:[inputName stringValue]];//從文字方塊把值讀入並把值寫到資料庫中
NSError *error;
if (![[self managedObjectContext] save:&error]) {
NSLog(@"Failed to save - error: %@", [error localizedDescription]);
}else {
[inputName setStringValue:@""];//inputName是介面上的輸入方塊
}
}
留言
張貼留言