久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    CoreData的增刪改查

     求知665 2015-08-03

    近幾天一直在使用 CoreData, 以前覺得它是一門高深的技術, 等自己用了之后才覺得,它是那么的平易近人.

    一: 首先我們要在創建應用程序的時候勾選 UseCoreData 選項, 當然也可以自己后期創建.

    系統會生成如下AppDelegate.h的文件

     1 #import <UIKit/UIKit.h>
     2 
     3 @interface AppDelegate : UIResponder <UIApplicationDelegate>
     4 
     5 @property (strong, nonatomic) UIWindow *window;
     6 
     7 // 上下文對象
     8 @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
     9 // 數據模型
    10 @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
    11 // 協調者
    12 @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
    13 
    14 // 在應用程序終止的時候會調用該方法
    15 - (void)saveContext;
    16 // 得到應用程序的 Documents 路徑, 將數據庫存在此目錄下
    17 - (NSURL *)applicationDocumentsDirectory;
    18 
    19 @end

    AppDelegate.m 文件會多出如下幾個方法:

     1 - (void)applicationWillTerminate:(UIApplication *)application
     2 {
     3     // 保存上下文對象的方法在此調用(程序結束的時候)
     4     [self saveContext];
     5 }
     6 
     7 #pragma makr - save context
     8 - (void)saveContext
     9 {
    10     // 程序意外終止就會調用此方法
    11     NSError *error = nil;
    12     NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
    13     if (managedObjectContext != nil) {
    14         if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
    15             NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    16             abort();
    17         } 
    18     }
    19 }
    20 
    21 #pragma mark - Core Data stack
    22 - (NSManagedObjectContext *)managedObjectContext
    23 {
    24     // 創建上下文對象
    25     if (_managedObjectContext != nil) {
    26         return _managedObjectContext;
    27     }
    28     
    29     NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    30     if (coordinator != nil) {
    31         _managedObjectContext = [[NSManagedObjectContext alloc] init];
    32         [_managedObjectContext setPersistentStoreCoordinator:coordinator];
    33     }
    34     return _managedObjectContext;
    35 }
    36 
    37 - (NSManagedObjectModel *)managedObjectModel
    38 {
    39     // 創建數據模型
    40     if (_managedObjectModel != nil) {
    41         return _managedObjectModel;
    42     }
    43     NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreDataDemo02" withExtension:@"momd"];
    44     _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    45     return _managedObjectModel;
    46 }
    47 - (NSPersistentStoreCoordinator *)persistentStoreCoordinator
    48 {
    49     // 創建協調者,也就是存儲區
    50     if (_persistentStoreCoordinator != nil) {
    51         return _persistentStoreCoordinator;
    52     }
    53     
    54     NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataDemo02.sqlite"];
    55     
    56     NSError *error = nil;
    57     _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    58     if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
    59         NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    60         abort();
    61     }    
    62     
    63     return _persistentStoreCoordinator;
    64 }
    65 
    66 #pragma mark - Application's Documents directory
    67 - (NSURL *)applicationDocumentsDirectory
    68 {
    69     // 得到 Documents 目錄
    70     return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    71 }

    這就是系統為我們搭建好的框架,我們只需要進行數據操作便可.

    二: 1)我們要在 CoreData 模板下添加實體以及實體的屬性,如圖:

    2) 新建文件, 集資選擇 CoreData-->NSManagedObjectSubClass, 選擇為 Person 實體創建類便可.如下:

    Person.h 文件

     1 #import <Foundation/Foundation.h>
     2 #import <CoreData/CoreData.h>
     3 
     4 
     5 @interface Person : NSManagedObject
     6 
     7 @property (nonatomic, retain) NSString * firstName;
     8 @property (nonatomic, retain) NSString * lastName;
     9 @property (nonatomic, retain) NSNumber * age;
    10 
    11 @end

    Person.m 文件

     1 #import "Person.h"
     2 
     3 
     4 @implementation Person
     5 
     6 @dynamic firstName;
     7 @dynamic lastName;
     8 @dynamic age;
     9 
    10 @end

    現在我們的環境已經準備完畢:

    三: 1) 寫入數據

     1 - (void)insertData
     2 {
     3     // 創建實體
     4     Person * newPerson = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
     5     // 賦值
     6     if (newPerson != nil) {
     7         newPerson.firstName = @"Zero";
     8         newPerson.lastName = @"Hour";
     9         newPerson.age = [NSNumber numberWithInt:20];
    10         
    11         // 保存數據
    12         NSError * savingError = nil;
    13         if ([self.managedObjectContext save:&savingError]) {
    14             NSLog(@"success");
    15         }else {
    16             NSLog(@"failed to save the context error = %@", savingError);
    17         }
    18     }else {
    19         NSLog(@"failed to create the new person");
    20     }
    21 }

    2) 刪除數據

     1 - (void)deleteData
     2 {
     3     NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
     4     NSEntityDescription * entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
     5     [fetchRequest setEntity:entity];
     6     
     7     NSError * requestError = nil;
     8     NSArray * persons = [self.managedObjectContext executeFetchRequest:fetchRequest error:&requestError];
     9     
    10     if ([persons count] > 0) {
    11         
    12         Person * lastPerson = [persons lastObject];
    13         // 刪除數據
    14         [self.managedObjectContext deleteObject:lastPerson];
    15         if ([lastPerson isDeleted]) {
    16             NSLog(@"successfully deleted the last person");
    17             NSError * savingError = nil;
    18             if ([self.managedObjectContext save:&savingError]) {
    19                 NSLog(@"successfully saved the context");
    20 
    21             }else {
    22                 NSLog(@"failed to save the context error = %@", savingError);
    23             }
    24         }else {
    25         
    26             NSLog(@"failed to delete the last person");
    27         }
    28     }else {
    29         NSLog(@"could not find any person entity in the context");
    30     }
    31 }

    3) 更改數據

     1 - (void)updateData
     2 {
     3     NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
     4     NSEntityDescription * entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
     5     [fetchRequest setEntity:entity];
     6     
     7     NSError * requestError = nil;
     8     NSArray * persons = [self.managedObjectContext executeFetchRequest:fetchRequest error:&requestError];
     9     
    10     if ([persons count] > 0) {
    11         
    12         Person * lastPerson = [persons lastObject];
    13         // 更新數據
    14         lastPerson.firstName = @"Hour";
    15         lastPerson.lastName = @"Zero";
    16         lastPerson.age = @21;
    17 
    18         NSError * savingError = nil;
    19         if ([self.managedObjectContext save:&savingError]) {
    20             NSLog(@"successfully saved the context");
    21             
    22         }else {
    23             NSLog(@"failed to save the context error = %@", savingError);
    24         }
    25 
    26 
    27     }else {
    28         NSLog(@"could not find any person entity in the context");
    29     }
    30 }

    4) 查詢數據

     1 - (void)findData
     2 {
     3     NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
     4     NSEntityDescription * entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
     5     [fetchRequest setEntity:entity];
     6     
     7     // 設置排序條件
     8     NSSortDescriptor * ageSort = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
     9     NSSortDescriptor * firstNameSort = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES];
    10     NSArray * sortDescriptors = @[ageSort, firstNameSort];
    11     [fetchRequest setSortDescriptors:sortDescriptors];
    12     
    13     // 設置查詢條件
    14     NSPredicate * agePre = [NSPredicate predicateWithFormat:@"age > 18"];
    15     [fetchRequest setPredicate:agePre];
    16     
    17     NSError * requestError = nil;
    18     NSArray * persons = [self.managedObjectContext executeFetchRequest:fetchRequest error:&requestError];
    19     int counter = 0;
    20     for (Person * thisPerson in persons) {
    21         NSLog(@"person-->%d, firstName = %@, lastName = %@, age = %d", counter, thisPerson.firstName, thisPerson.lastName, [thisPerson.age intValue]);
    22         counter ++;
    23     }
    24 }

    好了自己目前只學習了這么多, CoreData 是非常好用的, 我會更加深入的去學習的,再見!

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 偷拍精品一区二区三区| 欧美性大战久久久久XXX| 三级三级三级A级全黄| 天干天干天啪啪夜爽爽AV| 岛国岛国免费v片在线观看| 亚洲色欲色欱WWW在线| 午夜福利试看120秒体验区| 亚欧AV无码乱码在线观看性色| 欧洲亚洲精品免费二区| 国产一区二区在线影院| 99久久99这里只有免费费精品| 毛片大全真人在线| 国产成人午夜福利在线播放| 丰满无码人妻热妇无码区| 99久久99久久精品国产片| 国产成人一区二区三区免费| 精品久久久久久无码国产| 亚洲欧洲日产国无高清码图片| 69久久夜色精品国产69| 在线高清免费不卡全码| 永久黄网站色视频免费直播| 老司机精品成人无码AV| 国产丰满美女A级毛片| 亚洲国产日韩在线人成蜜芽| 国产成人av电影在线观看第一页| 又粗又大又黄又硬又爽免费看| 国产精品中文字幕一区| 亚洲国产精品久久久久久无码 | 久久久久波多野结衣高潮| 亚洲国产精品一区二区第一页| 丰满的少妇被猛烈进入白浆| 99riav国产精品视频| 免费国产黄线在线观看| 天堂中文8资源在线8| 少妇太爽了在线观看免费视频 | 国产免费高清69式视频在线观看| 亚洲精品55夜色66夜色| 综合激情亚洲丁香社区| 亚洲色成人一区二区三区人人澡人人妻人人爽人人蜜桃麻豆 | 免费日韩中文字幕高清电影 | 亚洲国产精品日韩在线|