zoukankan      html  css  js  c++  java
  • iOS基本数据库存储方式

    CoreData

    创建模型文件的过程

    1.选择模板

    2.添加实体

    3.添加实体的属性【注意】属性的首字母必须小写

    一、CoreData管理类(必备以下三个类对象)

    1.CoreData数据操作的上下文,负责所有的数据操作,类似于SQLite的数据库连接句柄(NSManagedObjectContext)

    (1).初始化方式

    //参数“ct”的类型

    //三种类型

    /*

         NSConfinementConcurrencyType 默认值,允许在特定的线程中执行,几乎不用

         NSPrivateQueueConcurrencyType  只会在主线程中执行

         NSMainQueueConcurrencyType 允许在子线程中执行

    */

    - (instancetype)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct 

    (2).设置持久化存储协调器(属性)

    persistentStoreCoordinator

     

    2.管理模型(NSManagedObjectModel)

    (1).一般都需要先获取获取模型文件的URL地址

    /*

    参数一:模型文件的名字

    参数二:模型文件的后缀名字

    【注意】:后缀名为.xcdatamodel的包,里面的.xcdatamodel文件,用数据模型编辑器编辑,编译后为.momd或.mom文件

    */

    方法:[[[NSBundle mainBundle] URLForResource:(NSString *)name withExtension:(NSString *)ext]

    (2).初始化NSManagedObjectModel对象,加载模型文件,读取App中的所有实体信息

    //参数一:该URL即指(1)中的模型文件的url路径

    - (nullable instancetype)initWithContentsOfURL:(NSURL *)url;

     

    3.持久化存储协调器(NSPersistentStoreCoordinator)

    (1).初始化方式

    - (instancetype)initWithManagedObjectModel:(NSManagedObjectModel *)model 

     

     

    说了这么多,其实以上三个coreData核心对象只要我们在创建工程时,打上该勾选,Xcode就会帮我们搭建好框架的,接下来我们只需要知道怎么调用

     

    【注意】黑色表示类名,红色表示类里面的一个属性方法

     

    二、添加数据 : 在上下文中插入一个实体(NSManagedObject)

    1.model = [NSEntityDescription insertNewObjectForEntityForName:实体名 inManagedObjectContext:管理实体的上下文];

    【注意】该model必须是NSManagedObject的对象,一般模型都继承NSManagedObject

    2.通过Key-Value模式设置插入模型的属性值

    3.将数据同步到持久化存储库 : save模型 [NSManagedObjectContext save:nil]; 

     

    三、查询数据

     

    1. 指向某个表的请求类

     

    //参数entityName:即创建的实体名(在SQLite中称为表名)

     

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:(NSString*)entityName];

     

     

     

    2. 添加查询条件

     

    (1).条件写死在字符串中

     

     NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age = 50"];

     

     

     

    (2).动态传值

     

    /*

     

    %K 查询的字段

     

    %@ 查询的值

     

    */

     

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K = %@", @"age", @(50)];

     

     

     

    (3).排序(NSSortDescriptor)

     

    //第一步:初始化

     

    /*

     

    参数一:key值,即排序根据的属性

     

    参数二:NO为降序,YES为升序

     

    */

     

    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];

     

    //第二步:给fetchRequest添加排序方式

     

    fetchRequest.sortDescriptors = @[sort];

     

     

     

    (4)范围查询

     

    //范围运算符(两种): IN(指定的值)        BETWEEN(开区间)

     

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age BETWEEN {15,60}"];

     

     

     

    (5).字符串相关查找

     

    /*3⃣️

     

        字符串相关:BEGINSWITHENDSWITHCONTAINS

     

        例:

     

        @“属性名 CONTAINS[cd] ‘包含的字符串’”  // 包含某个字符串

     

        @“属性名 BEGINSWITH[c] '包含的字符串'"  // 以某个字符串开头

     

        @"属性名 ENDSWITH[d] '包含的字符串'"   // 以某个字符串结束

     

    【注意】:包含的字符串要用单引号括上

     

        :[c]不区分大小写

     

             [d]不区分发音符号即没有重音符号

     

    [cd]既不区分大小写,也不区分发音符号。

     

        */

     

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"username ENDSWITH 'wu '"];

     

     

     

    (6).通配符查找

     

    /*   

     

    通配符:LIKE

     

         例:

     

         @"属性名 LIKE[cd] '*er*'"    //      *表示多个字符

     

         @"属性名 LIKE[cd] '???er*'"  //      ?表示一个字符

     

         */

     

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"username LIKE '*san*'"];

     

     

     

    …………..还有其他条件设置,我会上传一份比较综合的文档给大家

     

    3. 设置查询条件

     

    fetchRequest.predicate = predicate;

     

     

     

    4. 执行请求,请求的结果被放在数组中,数组中存放的就是模型

     

    NSArray *result = [NSManagedObjectContext executeFetchRequest:fetchRequest error:&error];

     

     

    四、删除数据

    //删除某一个实体(即模型)

    [NSManagedObjectContext deleteObject:实体];

    只要对模型做了修改,调用save方法就可以自动修改数据库中的值

    [NSManagedObjectContext save:nil];

     

    五、修改

    直接修改模型属性的值

    save模型

     

  • 相关阅读:
    layer常用方法
    使用GLSL实现更多数量的局部光照 【转】
    GLSL实现简单硬件Anisotrop Lighting 【转】
    Bump mapping的GLSL实现 [转]
    图形化OpenGL调试器 BuGLe [转]
    GLSL实现Fresnel And Chromatic aberration 【转】
    GLSL实现Ambient Occlusion 【转】
    GLSL实现Glow效果 [转]
    2013年中国区Skyline软件价格体系
    [OSG]如何用Shader得到物体的世界坐标
  • 原文地址:https://www.cnblogs.com/Mr-Lin/p/5268683.html
Copyright © 2011-2022 走看看