iOS的CoreData用法 – iPhone手機開發技術文章 iPhone軟體開發教學課程

CoreData以前沒用過,最近試用瞭一下,感覺省瞭好多的代碼,很方便。當然,也隻是會使用。

首先來創建一個工程

系統默認會給你增加一些東西,至於這些東西具體幹嘛使的,自己去谷歌找找,說瞭,我隻會使用。

在工程目錄下有一個.xcdatamodeld的文件,這就是CZ喎?/kf/ware/vc/” target=”_blank” class=”keylink”>vcmVEYXRhtcTW2LXjwcuho7/J0tTU2tXiwO/D5sztvNPSu9CpTW9kZWxkus3F5NbDTW9kZWxktcTK9NDUoaM8YnI+CgrU2nhjZGF0YW1vZGVsZLXE1/PPwr3HQWRkIEVudGl0ec/gtbHT2rS0vajSu7j2yv2+3cSj0M3Sss/gtbHT2tTayv2+3b/itLS9qMHL0rvVxbHtoaM8aW1nIHNyYz0=”/uploadfile/Collfiles/20140306/2014030614011142.jpg” alt=”\”>

現在我們創建一個名Dog的Modeld。同時,這個名字的首字母要大寫。

接下來我們來配置這個Dog的一些屬性。點擊+號添加屬性,Type可以選擇屬性的類型。

然後在Editor裡點擊CreateNSManagedObject SubClass…選擇Dog,然後Create就會多出一個Dog類。

當然,我們完沒有必要在意這些東西。

現在就是使用這個東西瞭,好吧,我承認這一塊不太會描述,因為我的數據庫學的不太好。
在創建工程的時候,他會自動在AppDelegate裡描述一個屬性。

我們就是使用NSManagedObjectContext來對文件的增刪改查的操作。

首先,我們來插入一條數據。別忘瞭導入Dog的頭文件,雖然這是常識。

創建一個Dog對象。(@(1) == [NSNumbernumberWithInt:1];)

 Dog *dog = [NSEntityDescription insertNewObjectForEntityForName:@"Dog" inManagedObjectContext:self.managedObjectContext];
    
    [dog setName:@"花花"];
    [dog setAge:@(1)];
    [dog setSex:@(0)];

保存

    NSError *error = nil;
    BOOL isSave =   [self.managedObjectContext save:&error];
    if (!isSave) {
        NSLog(@"error:%@,%@",error,[error userInfo]);
    }
    else{
        NSLog(@"保存成功");
    }

然後就是查詢這個表的數據,描述一個可變數組來保存他們。

@property (strong, nonatomic) NSMutableArray *dataArray;

  //創建取回數據請求
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    //設置要檢索哪種類型的實體對象
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Dog"inManagedObjectContext:self.managedObjectContext];
    //設置請求實體
    [request setEntity:entity];
    //指定對結果的排序方式
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name"ascending:NO];
    NSArray *sortDescriptions = [[NSArray alloc]initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptions];
    NSError *error = nil;
    //執行獲取數據請求,返回數組
    NSMutableArray *mutableFetchResult = [[self.managedObjectContext executeFetchRequest:request error:&error] mutableCopy];
    if (mutableFetchResult == nil) {
        NSLog(@"Error: %@,%@",error,[error userInfo]);
    }
    self.dataArray = mutableFetchResult;
    for (Dog *dog in self.dataArray) {
        NSLog(@"age:%@---sex:%@---name:%@",dog.age,dog.sex,dog.name);
    }

現在我們給一個對象改個名字。

    [dog setName:@"哮天犬"];
    NSError *error;
    BOOL isUpdateSuccess = [self.managedObjectContext save:&error];
    if (!isUpdateSuccess) {
        NSLog(@"error:%@,%@",error,[error userInfo]);
    }
    else{
        NSLog(@"更新成功!");
    }

最後再刪除這條數據

    [self.managedObjectContext deleteObject:dog];
    [self.dataArray removeObject:dog];
    NSError *error;
    if (![self.managedObjectContext save:&error]) {
        NSLog(@"Error:%@,%@",error,[error userInfo]);
    }
    else{
        NSLog(@"刪除成功!");
    }

現在我就會這麼多瞭,希望對你有所幫助。
還有,系統默認是把數據保存到Documents下面。你可以在AppDelegate的這個方法裡修改。當然,這不重要。

發佈留言