zoukankan      html  css  js  c++  java
  • coredata 的基本使用(转载)

    CoreData提供了一种简便的对象持久化管理方法,使你可以不用关心数据的存储,只需要关心对象的增加、删除、更改、读写。

    基本概念
    托管对象(managed object)
    一个托管对象代表你想要保存到数据存储中的一个对象。这在概念上类似于SQL中的一条记录, 并且通常也包含一些域,这些域对应于你想要保存的对象的属性。

    数据存储(data store)
    Core Data支持4中类型的数据存储:SQLiteStore, XMLStore, BinaryStore, InMemoryStore。

    托管对象上下文(managed object context)
    托管对象上下文类似于应用程序和数据存储之间的一块缓冲区。这块缓冲区包含所有未被写入数据存储的托管对象。你可以添加、删除、更改缓冲区内的托管对象。在很多时候,当你需要读、插入、删除对象时,你将会调用托管对象上下文的方法。
     
    持久化存储协调器(persistent store coordinator)
    持久化存储协调器处理到数据存储的连接,并且包含一些底层信息,像用到数据存储的名字和位置。这个类通常被托管对象上下文用到。
     
    托管对象模型(managed object model)
    托管对象模型是一个类,这个类包含每一个你想存储到数据存储中的托管对象的定义。
    大概是这样一种层次关系:
     

    使用CoreData

    在你可以读或写模型对象到当前数据存储之前,你需要实例化托管对象模型、托管对象上下文、持久化存储协调器。
    托管对象模型由NSManagedObjectModel类的一个实例表示。在一个工程中我们只需要为所有的.xcdatamodeld文件实例化一个对象。
    NSManagedObjectModel* managedObjectModel = [NSManagedObjectModel
            mergedModelFromBundles:nil];
    mergedModelFromBundles: 搜索工程中所有的.xcdatamodeld文件,并加载所有的实体到一个NSManagedObjectModel  实例中。
    这样托管对象模型知道所有当前工程中用到的托管对象的定义

    2 有了托管对象模型实例之后,我们就可以创建一个持久化协调器实例了。持久化协调器处理到数据存储的连接。大概是处理怎么把对象写到数据存储或怎么从数据存储读对象吧。

    有了持久化协调器实例之后,我们需要提供一个数据存储给它管理。你可以通过发送addPersistentStoreWithType:configuration:URL:options:error:消息来实现。

    最后一步就是实例化托管对象上下文。有了托管对象上下文,你就可以方便的管理对象了。

    下面是使用的实例代码:

    1 初始化
    -(void) viewDidLoad

    复制代码
    //创建管理对象模型
        objectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
        
        // 创建持久化数据存储协调器
        coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:objectModel];
        
        // 添加数据存储
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        // 创建一个SQLite数据库作为数据存储
        NSString *documentsDir = [paths objectAtIndex:0];
        NSString *filePath = [documentsDir stringByAppendingPathComponent:@"datastore.sqlite"];
        NSURL *databaseURL = [NSURL fileURLWithPath:filePath];
        
        NSError *error = nil;
        [coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:databaseURL options:nil error:&error];
        
        // 创建托管对象上下文
        objectContext = [[NSManagedObjectContext alloc] init];
        [objectContext setPersistentStoreCoordinator:coordinator];
    复制代码

    2 添加对象

    复制代码
    NSString* newName = nameField.text;
        NSString* newPhone = phoneField.text;
        NSString* newPostcode = postcodeField.text;
        
        ContactData *newContact = (ContactData *)[NSEntityDescription insertNewObjectForEntityForName:@"ContactData" inManagedObjectContext:objectContext];
        newContact.customerName = newName;
        newContact.phoneNumber = newPhone;
        newContact.postCode = newPostcode;
        
        NSError* error;
        
        if ([objectContext save:&error])
        {
            [self fetchExistingContactData];
            [tableofcontacts reloadData];
        }
    复制代码

    3 访问对象

    复制代码
     NSFetchRequest* fetchRequest = [[NSFetchRequest alloc] init];
        NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"ContactData"
                                                             inManagedObjectContext:objectContext];
        [fetchRequest setEntity:entityDescription];
        
        NSError* error;
        existingContacts = [objectContext executeFetchRequest:fetchRequest error:&error];
    复制代码
  • 相关阅读:
    jquery获取tr并更改tr内容
    jquery获取元素索引值index()
    禁止apache显示目录索引 apache禁止列目录
    mysql启动错误之mysql启动报1067错误如何解决
    Expo大作战(四)--快速用expo构建一个app,expo中的关键术语
    Expo大作战(三)--针对已经开发过react native项目开发人员有针对性的介绍了expo,expo的局限性,开发时项目选型注意点等
    Expo大作战(二)--expo的生命周期,expo社区交流方式,expo学习必备资源,开发使用expo时关注的一些问题
    Expo大作战(一)--什么是expo,如何安装expo clinet和xde,xde如何使用
    Linux(CentOS)之-性能监控
    [转]winform程序textbox滚动条保持在最下面 内容不闪烁
  • 原文地址:https://www.cnblogs.com/conanwin/p/4604860.html
Copyright © 2011-2022 走看看