• 关于Core Data的一些整理(一)


    关于Core Data的一些整理(一)

    在Xcode7.2中只有Mast-Debug和Single View中可以勾选Use Core Data

    如果勾选了Use Core Data,Xcode会自动在AppDelegate中帮你生成Core Data的核心代码,并且自动生成.xcdatamodeld数据文件
     
      1 //Appdelegate.h中
      2 #import <UIKit/UIKit.h>
      3 #import <CoreData/CoreData.h>
      4 
      5 @interface AppDelegate : UIResponder <UIApplicationDelegate>
      6 
      7 @property (strong, nonatomic) UIWindow *window;
      8 
      9 @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
     10 @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
     11 @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
     12 
     13 - (void)saveContext;
     14 - (NSURL *)applicationDocumentsDirectory;
     15 
     16 
     17 @end
     18 
     19 
     20 
     21 //Appdelegate.m中系统帮助生成的代码
     22 - (void)applicationWillTerminate:(UIApplication *)application {
     23   // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
     24   // Saves changes in the application's managed object context before the application terminates.
     25   [self saveContext];
     26 }
     27 
     28 #pragma mark - Core Data stack
     29 
     30 @synthesize managedObjectContext = _managedObjectContext;
     31 @synthesize managedObjectModel = _managedObjectModel;
     32 @synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
     33 
     34 - (NSURL *)applicationDocumentsDirectory {
     35     // The directory the application uses to store the Core Data store file. This code uses a directory named "qq100858433.JMHitList" in the application's documents directory.
     36     return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
     37 }
     38 
     39 - (NSManagedObjectModel *)managedObjectModel {
     40     // The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
     41     if (_managedObjectModel != nil) {
     42         return _managedObjectModel;
     43     }
     44     NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"JMHitList" withExtension:@"momd"];
     45     _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
     46     return _managedObjectModel;
     47 }
     48 
     49 - (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
     50     // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it.
     51     if (_persistentStoreCoordinator != nil) {
     52         return _persistentStoreCoordinator;
     53     }
     54     
     55     // Create the coordinator and store
     56     
     57     _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
     58     NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"JMHitList.sqlite"];
     59     NSError *error = nil;
     60     NSString *failureReason = @"There was an error creating or loading the application's saved data.";
     61     if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
     62         // Report any error we got.
     63         NSMutableDictionary *dict = [NSMutableDictionary dictionary];
     64         dict[NSLocalizedDescriptionKey] = @"Failed to initialize the application's saved data";
     65         dict[NSLocalizedFailureReasonErrorKey] = failureReason;
     66         dict[NSUnderlyingErrorKey] = error;
     67         error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
     68         // Replace this with code to handle the error appropriately.
     69         // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
     70         NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
     71         abort();
     72     }
     73     
     74     return _persistentStoreCoordinator;
     75 }
     76 
     77 
     78 - (NSManagedObjectContext *)managedObjectContext {
     79     // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
     80     if (_managedObjectContext != nil) {
     81         return _managedObjectContext;
     82     }
     83     
     84     NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
     85     if (!coordinator) {
     86         return nil;
     87     }
     88     _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
     89     [_managedObjectContext setPersistentStoreCoordinator:coordinator];
     90     return _managedObjectContext;
     91 }
     92 
     93 #pragma mark - Core Data Saving support
     94 
     95 - (void)saveContext {
     96     NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
     97     if (managedObjectContext != nil) {
     98         NSError *error = nil;
     99         if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
    100             // Replace this implementation with code to handle the error appropriately.
    101             // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
    102             NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    103             abort();
    104         }
    105     }
    106 }
    107 
    108 @end

    假如你在.xcdatamodeld中生成了如下实体和实体属性:

     

    那么在VC中获取数据库内容和添加数据库内容的代码如下:
     1   //从Core Data中获得已有数据
     2   id appDelegate = [UIApplication sharedApplication].delegate;
     3   NSManagedObjectContext *managedContext = [appDelegate managedObjectContext];
     4   NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Person"];
     5   @try {
     6     self.people = [NSMutableArray arrayWithArray:[managedContext executeFetchRequest:fetchRequest error:nil]];
     7   }
     8   @catch (NSException *exception) {
     9     NSLog(@"Could not fetch %@", [exception userInfo]);
    10   }
    11   @finally {
    12     NSLog(@"Fetch Successful");
    13   }
    14   
    15   //为数据库添加实体实例
    16   id appDelegate = [UIApplication sharedApplication].delegate;
    17   //NSManagedObjectContext可以看做内存中用来处理managedObjects的暂存器
    18   NSManagedObjectContext *mangedContext = [appDelegate managedObjectContext];
    19   //下面两种方法都可以获得Person实体
    20 //  NSEntityDescription *entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:mangedContext];
    21 //  NSManagedObject *person = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:mangedContext];
    22 //  [person setValue:name forKey:@"name"];
    23   NSManagedObject *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:mangedContext];
    24   [person setValue:name forKey:@"name"];
    25   @try {
    26     [mangedContext save:nil];
    27     [self.people addObject:person];
    28   }
    29   @catch (NSException *exception) {
    30     NSLog(@"Could not save %@", [exception userInfo]);
    31   }
    32   @finally {
    33     NSLog(@"Save Successfullt!");
    34   }
     
     
     
  • 相关阅读:
    VS Code的常用备忘
    Echarts圆环,初始化时进度条效果
    nodejs 复制文件到 另一路径下 。可以在npm库看下mv 和 mvdir 有一点区别
    nginx启动报错(1113: No mapping for the Unicode character exists in the target multi-byte code page
    Echarts dataZome 横向移动动态显示数据
    flex布局时,会有兼容性问题,所以能少用flex布局的地方还是要避免下
    python 搭建 flask 和 orator框架开发
    直播 小测试
    对高并发的理解
    MySQL 中文分词原理
  • 原文地址:https://www.cnblogs.com/jackma86/p/5130926.html
Copyright © 2020-2023  润新知