创建数据模型(表)

1、在Xcode创建的时候选择 Use Core Data 或者再已经创建好的项目中Add File
iOS开发 ☞ CoreData基本使用

2、点击Add Entity 添加数据实体(表),并且给表添加字段

iOS开发 ☞ CoreData基本使用

3、点击表,右侧有Codegen选项,默认是Class Defination 在我们Build工程的时候会自动创建,但是不会在Xcode目录中显示,使用时 需要引入头文件,如下图

iOS开发 ☞ CoreData基本使用
使用时
iOS开发 ☞ CoreData基本使用

这里我们使用手动生成,Codegen选项选择Manual/None 如下图:
iOS开发 ☞ CoreData基本使用
此时,Xcode不再自动生成实体类

我们可以手动生成这些文件,首先点击后缀为xcdatamodeld的文件,然后点击Editor
iOS开发 ☞ CoreData基本使用
这里需要注意,如果我们Codegen没有选择手动模式,那么系统可能已经生成过了,此时再手动生成文件会报错
iOS开发 ☞ CoreData基本使用

这个时候我们需要将Codegen改为手动模式,clean一下,就可以了

手动模式生成的实体类文件如下图:
iOS开发 ☞ CoreData基本使用

创建CoreData栈

初始化CoreData栈需要一步步初始化三个对象结构
1、NSManagedObjectModel
2、NSPersistentStoreCoordinator
3、NSManagedObjectContext

代码如下

- (NSManagedObjectModel *)managedObjectModel {
    if (!_managedObjectModel) {
        NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreDataDemo" withExtension:@"momd"];
        _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    }
    return _managedObjectModel;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (!_persistentStoreCoordinator) {
        _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
        NSURL *sqliteURL = [[self documentDirectoryURL] URLByAppendingPathComponent:@"CoreDataDemo.sqlite"];
        NSError *error;
        [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:sqliteURL options:nil error:&error];
    
        if (error) {
            NSLog(@"failed to create persistentStoreCoordinator");
        }
}
                        
    return _persistentStoreCoordinator;
}
                        
// 用来获取 document 目录
- (nullable NSURL *)documentDirectoryURL {
     return [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask].firstObject;
}


- (NSManagedObjectContext *)context {
     if (!_context) {
        _context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType
                ];
        _context.persistentStoreCoordinator = self.persistentStoreCoordinator;
    }
    return  _context;
}

相关文章:

  • 2021-08-21
  • 2022-12-23
  • 2021-12-19
  • 2022-01-30
  • 2021-10-23
  • 2021-12-02
  • 2022-12-23
  • 2018-07-03
猜你喜欢
  • 2021-08-29
  • 2022-12-23
  • 2021-09-29
  • 2022-12-23
  • 2021-07-14
  • 2022-12-23
相关资源
相似解决方案