iOS入门(四十) CoreData

来源:互联网 发布:咪喹莫特 知乎 编辑:程序博客网 时间:2024/05/19 20:48

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])
 //4新增受托管的对象的文本
        _managedObjectContext = [[NSManagedObjectContext alloc] init];
 //5将受托管对象文本与文件储存协调器连接起来
        [_managedObjectContext setPersistentStoreCoordinator:coordinator];


 AppDelegate * appDelegate = [[UIApplication sharedApplication] delegate];


    [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]) {


0 0