创建数据模型(表)
1、在Xcode创建的时候选择 Use Core Data 或者再已经创建好的项目中Add File
2、点击Add Entity 添加数据实体(表),并且给表添加字段
3、点击表,右侧有Codegen选项,默认是Class Defination 在我们Build工程的时候会自动创建,但是不会在Xcode目录中显示,使用时 需要引入头文件,如下图
使用时
这里我们使用手动生成,Codegen选项选择Manual/None 如下图:
此时,Xcode不再自动生成实体类
我们可以手动生成这些文件,首先点击后缀为xcdatamodeld的文件,然后点击Editor
这里需要注意,如果我们Codegen没有选择手动模式,那么系统可能已经生成过了,此时再手动生成文件会报错
这个时候我们需要将Codegen改为手动模式,clean一下,就可以了
手动模式生成的实体类文件如下图:
创建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;
}