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是介面上的輸入方塊
    }    
}

留言

這個網誌中的熱門文章

[心得] 圖解 微分、積分生活中的微積分-第一章

Objective-C的數學運算函式

c# 把List中重復的資料去掉