Core Data 使用

创建 Core Data 工程

// 性能优化:https://github.com/facebook/AsyncDisplayKit 框架, 框架集成了大量异步操作, 把UIView -> CALayer 转变成 CAlayer -> Node, 这样的轻量级控件加上异步操作。

  • 创建工程(打勾)


    打勾.png
  • 出现新的文件:


    新的.png
  • 点击创建模型对象:

Core Data 使用_第1张图片
创建模型对象.png
  • 点击Editor:
Core Data 使用_第2张图片
点击Edit.png
  • 工程目录多了好几个文件,说明成功了。

这种情况是,企业项目创建的时候,如果是没有打勾,意味着不使用CoreData创建:

打勾.png
  • 但是,后期如果考虑使用CoreData 的话,那么就要这么创建:
  • 首先:创建一个CoreData文件:


    Core Data 使用_第3张图片
    创建CoreData.png
  • 最好选择类似如下图的路径:(默认不是这样的,很多人都习惯性选择点击下一步!)
Core Data 使用_第4张图片
注意路径.png
  • 接着会出现一个新文件:


    新的.png
  • 然后,是和上面的创建一样!,但是,有些东西是要手动写的!创建完后在 AppDelegate.h文件里添加(其实是打勾系统默认生成的,这里是手动创建,所以要这样写:):

    @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
    @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
    @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
    
    - (void)saveContext;
    - (NSURL *)applicationDocumentsDirectory;
    
  • 接着在:AppDelegate.m文件里添加下面代码(注意:由于太多代码,这里就不贴了,下面这是开头的一小部分,如果自己需要的话可以新建一个Demo然后复制进去咯!)
    #pragma mark - Core Data stack

    @synthesize managedObjectContext = _managedObjectContext;
    @synthesize managedObjectModel = _managedObjectModel;
    @synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
    
  • 然后,在上面的很长的代码里找到 类似KVC_coreData_____:的代码,然后修改和表名一致

修改.png
  • 修改后(我的数据表的名字是Product):
修改和表名一致.png
  • 最后就是,常规操作,例如:导入,AppDelegate.h ,创建托管的上下文对象,模型接收,保存等等!(这里是小例子:)

  • 在ViewController.h引入文件:
    #import "Person.h"
    #import "AppDelegate.h"

    @interface ViewController ()
    
      // 托管的上下文对象
      @property (nonatomic,strong)NSManagedObjectContext *managedObjectContext;
    
     @end
    @implementation ViewController
    
    // 懒加载
    -(NSManagedObjectContext *)managedObjectContext
    {
      if (!_managedObjectContext) {
      AppDelegate *del = [UIApplication sharedApplication].delegate;
      _managedObjectContext = del.managedObjectContext;
      }
    
      return _managedObjectContext;
    }
    - (void)viewDidLoad {
    [super viewDidLoad];
    
    // 插入数据
    
    // 实例化映射的对象
    /**
     *  参数一:表名
     *  参数二:托管的上下文对象(缓冲区嘛)
     *  @param NSString
     */
    
    // 把要插入Person的这个表的数据先存储到缓存区
    // 注意: 不能用allco init ,因为创建出来的对象与本地对象没有联系
    Person *perModel = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.managedObjectContext];
    
    // 给对象赋值(实际上是给本地数据字段赋值,需要等待把)
    perModel.name = @"小米";
    perModel.age = @22;
    perModel.headImage = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"111" ofType:@"jpg"]];
    
    // 写入本地
    NSError *error = nil;
    [self.managedObjectContext save:&error]; // 保存
    if (error) {
      NSLog(@"error = %@",[error description]);
    }
    
    NSLog(@"---%@",NSHomeDirectory());
    }
    
上面的代码没什么好解释,哈哈,因为有好多注释了,主要注意一下Person模型表,不是Person *perModel = [[Person alloc] init];

注意:

  • 修改模型,要设置一致,例如,修改不彻底Person 和上次的PersonModel 不一致:


    Core Data 使用_第5张图片
    修改class.png

下面一篇文章写CoreData 和KVC结合使用对象转模型出现的坑!(欢迎交流!!!)

你可能感兴趣的:(Core Data 使用)