NSPersistentStoreCoordinator (持久存储协调者) 数据连接器类
NSPersistentStore 对应一个文件
NSManagedObjectContext 数据管理器类,被管理对象上下文(相当于一个临时数据库对数据进行更改,通过saveContext保存更改)
存放NSManagedObject对象
NSManagedObjectModel 数据模型器类(Entity)
- (void)saveContext;//保存
- (NSURL *)applicationDocumentsDirectory;//应用文件路径
@dynamic告诉编译器,属性的setter与getter方法由用户自己实现,不自动生成。(当然对于readonly的属性只需提供getter即可)。假如一个属性被声明为@dynamic var,然后你没有提供@setter方法和@getter方法,编译的时候没问题,但是当程序运行到instance.var =someVar,由于缺setter方法会导致程序崩溃;或者当运行到 someVar = var时,由于缺getter方法同样会导致崩溃。编译时没问题,运行时才执行相应的方法,这就是所谓的动态绑定。
//0指向后端存储的文件
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData.sqlite"];
//1.获取Model
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreData" withExtension:@"momd"];
//2获取文件存储协调器 我有中介 中介有MODEL
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
//3.配置文件案 存储协调器后连接的文件系统(内存内) 中介有了Model之后 又知道了数据
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error])
[self.tableView reloadData];
[self.tableView performSelector:@selector(reloadData) withObject:nil afterDelay:0];
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:YES];
NSIndexPath * index = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:@[index] withRowAnimation:UITableViewRowAnimationFade];
// [self.managedObjectContext save:nil];
AppDelegate * app = [[UIApplication sharedApplication] delegate];
[app saveContext];
版本迁移
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"LessonCoreData.sqlite"];
// [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:@{NSMigratePersistentStoresAutomaticallyOption:@YES,NSInferMappingModelAutomaticallyOption:@YES} error:&error]) {