• iOS数据库操作之coredata详细操作步骤


    iOS数据库操作之coredata详细操作步骤


     
     
    iOS应用数据存取的常用方式 
    • XML属性列表 -- PList
    • NSKeyedArchiver 归档 •Preference(偏好设置) • SQLite3
     Core Data

    Core Data简介 
     Core Data iOS SDK 里的一个很强大的框架,允许程序员以面向对象 的方式储存和管理数据。使用Core Data框架,程序员可以很轻松有效 地通过面向对象的接口管理数据 
     Core Data框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转 化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的 数据还原成OC对象 
     在数据操作过程中,无需编写任何SQL语句 
    • 要使用Core Data,需要导入CoreData框架 



    模型文件及实体(Entity)
    • 要使用CodeData,首先需要定义模型文件,描述应用程
    序中的所有实体(Entities)• 所谓实体,是跟数据库进行映射的对象 


    NSManagedObject--对应数据库中的一条记录 


    Core Data主要对象关系示意图 类似于数据库的句柄,handle,用来操纵数据库
                    持久化存储调度者,是数据库与对象之间的

     
    在开发中,只会用到一次,如果不理解,直接粘代码




    Core Data主要对象
     NSManagedObjectContext:负责应用和数据库之间的交互(CRUD)
     NSPersistentStoreCoordinator:添加持久化存储库(如SQLite数据 库),是物理数据存储的物理文件和程序之间的联系的桥梁,负责管 理不同对象上下文
     NSManagedObjectModel:被管理的对象模型 NSEntityDescription:实体描述 

    打开数据库 
    // 1. 实例化持久化的存储 
    // 1.1 Bundle中加载被管理的数据模型 
    NSManagedObjectModel *model = [NSManagedObjectModelmergedModelFromBundles:nil];
    // 1.2 实例化持久化存储调度 
    NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:model];
    ...
    // 1.3 添加持久化存储(SQLite)
    [store addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nil URL:url options:nil
    error:&error];
    ...
    // 管理对象上下文 _context = [[NSManagedObjectContext alloc]init]; _context.persistentStoreCoordinator = store;



    新增记录 
    Person *p = [NSEntityDescriptioninsertNewObjectForEntityForName:@"Person"inManagedObjectContext:_context];
    p.name = @"张三"; p.age = @18;
    [_context save:nil]; 

    查询数据--NSFetchedResultsControllerNSManagedObjectContext *context = [[DataManagersharedDataManager] sharedContext];
    NSFetchRequest *request = [NSFetchRequestfetchRequestWithEntityName:@"Person"];
    // 定义查询排序 NSSortDescriptor *sort = [NSSortDescriptorsortDescriptorWithKey:@"name" ascending:YES]; request.sortDescriptors = @[sort];
    // 定义查询结果控制器 _fetchedResultController = [[NSFetchedResultsController alloc]initWithFetchRequest:request
    managedObjectContext:context sectionNameKeyPath:nilcacheName:nil]; ...
    [
    _fetchedResultController performFetch:&error];

    查询数据 
    NSFetchRequest *request = [NSFetchRequestfetchRequestWithEntityName:@"Person"];
    request.predicate = [NSPredicatepredicateWithFormat:@"%K LIKE '*52*' OR name CONTAINS ''", @"phoneNo"];
    NSArray *array = [_contextexecuteFetchRequest:request error:nil];

    更新&删除记录 
    1. 找到要更新、删除的记录 2. 更新:修改对象属性3. 删除:上下文删除对象 4. 上下文保存

    Core Data的调试 




    技术博客http://www.cnblogs.com/ChenYilong/ 
    新浪微博http://weibo.com/luohanchenyilong
     
     
     

    下面是iOS数据库操作之coredata详细操作步骤:附上pdf文档和示例程序:

    CoreData
    1. 常用类和方法 (注意需要导入 coredata 框架 )
    表结构:NSEntityDescription
    表记录:NSManagedObject 数据库存放方式:NSPersistentStoreCoordinator(持久化存储协调者) 数据库操作:NSManagedObjectContext(被管理的对象上下文)
    2. xcode 图形管理
    2. 3.
    4.
    2.操作数据库
    一.连接数据库
    1. 首先需要创建一个操作数据库的上下文。NSManagedObjectContext
    1. 操作数据库的上下文需要设置一个调度者属性,这个调度者是用来将图形化
      建立的模型和数据库联系起来。
    1. 给调度者添加一个需要联系的数据库。
    二.添加,更新,删除
    添加:
    1. 新建实体 INST (插入) 2. 设置实体的属性
    3. 保存上下文
    更新:
    1. 判断是否已有一模一样的模型 2. 设置实体属性
    3. 保存上下文
    删除
    三.查询
    1.使用 NSFetchedResultsController 控制器
    2.1 当操作数据上下文的内容改变的时候,会自动调用抓取结果控制器的代理方 法
    3.
    注意:一定要执行抓取请求,返回的数据在 sections 里,这个数组中装的都是遵 守 NSFetchedResultsSectionInfo 这个协议的对象。通过
    numberOfObjects 就能获取一组有多少数据对象了。
     
     

    1. 建立数据模型DataModel

    * Entity - Entities(实体)
    暂时理解为数据库中的表,在定义数据模型时,第一步就要定义实体
    * Attributes(属性)
    暂时理解为数据库中的字段

    2. 建立NSManagedObject(被管理的对象)

    以上操作全部用鼠标就可以完成(属性名字除外)
    在数据模型最终确立之前,person.h&person.m中的内容都是自动生成的,不需要修改其中代码。

    NSManagedObject的内容是通过图形化的界面确定实体的属性之后,自动生成的。

    @dynamic 编译器会动态生成getter&setter方法,提高程序的扩展度。

    FetechedResultController执行查询后,返回遵守了
    NSFetchedResultsSectionInfo协议的对象的数组


    除了安全,设计公司高级机密的,可以使用静态库
    .a
    .framework

    对于iOS程序员,如果将自己的代码包在.a,会形成依赖!

     
     
     
     
     
     
     
     
     
    coredata第三方框架,附上官方示例程序:
    数据库工具_CoreData_MagicalRecord-develop
     
     
     
    © chenyilong. Powered by Postach.io
  • 相关阅读:
    Java编译期和运行期
    深入理解重载和重写及与之相关的多态性 Overloading and Overriding(转)
    Java编译期优化与运行期优化技术浅析
    JAVA反射
    JSP笔记(二)
    JSP笔记(一)
    字符串之String类
    JAVA的Random类介绍
    (转)详细分析css float 属性
    协议与委托
  • 原文地址:https://www.cnblogs.com/ChenYilong/p/3720382.html
Copyright © 2020-2023  润新知