创建 Core Data 工程
// 性能优化:https://github.com/facebook/AsyncDisplayKit 框架, 框架集成了大量异步操作, 把UIView -> CALayer 转变成 CAlayer -> Node, 这样的轻量级控件加上异步操作。
-
创建工程(打勾)
-
出现新的文件:
点击创建模型对象:
- 点击Editor:
- 工程目录多了好几个文件,说明成功了。
这种情况是,企业项目创建的时候,如果是没有打勾,意味着不使用CoreData创建:
- 但是,后期如果考虑使用CoreData 的话,那么就要这么创建:
-
首先:创建一个CoreData文件:
- 最好选择类似如下图的路径:(默认不是这样的,很多人都习惯性选择点击下一步!)
-
接着会出现一个新文件:
-
然后,是和上面的创建一样!,但是,有些东西是要手动写的!创建完后在 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_____:的代码,然后修改和表名一致
- 修改后(我的数据表的名字是Product):
最后就是,常规操作,例如:导入,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 不一致: