sqliteCoreData

事先在求学运用SQLite时,
需要编制大量的sql语句,完成多少的增删改查,但对于不熟练sql语句的开发人员来说,难度较大,调试程序相比较不方便。

透过出现CoreData框架,将sql的操作转换成为目标的操作,无需编写sql语句。并且对数据库的操作也得以可视化。

  1. CoreData
    自iOS5涌出的框架,提供了对象-关系映射(ORM)效率。通过此框架可将 对象
    转化成数据,存储到SQLite 数据库文件中,

也能将SQLite数据库中的数据转化成对象。CoreData实际上是包装了的SQLite操作的库,封装度高,无需开发人员接触SQL语句。

   在CoreData中,需要被映射的靶子被称呼实体(entity),即sqlite中的表;每个实体都有性能,即sqlite中对应表的字段。

    > 使用CoreData 

       — 先创设模型文件(相当于创建数量库表结构),后缀名 xcdatamodeld

           两种方法开创:

           a. 可以在开立iOS 工程时,采纳 use Core Data,
工程中会自动生成模型文件

           b. 创设工程后 New file ,选用iOS ->Core Data -> Data
Model

       — 添加实体,(添加表)

           Add Entity 注意:实体名字首字母大写

       — 给实体添加属性 (在表中添加字段)

           Attributes -> +  注意:实体性质名字首字母小写

       — 如何通过代码访问

           先理解CoreData 中的核心目标

           1.) Managed Object Model  管理的靶子模型

             描述应用程序的数据模型,这么些模型包含实体(Entity),属性(Property),读取请求(Fetch
Request)等。 对应代码中的类:NSManagedObject ,类似于NSDictionary ,
通过键-值存取实体性质。

             2.)Managed Object Context 管理的靶子上下文

             出席对数据对象举行各样操作的全经过,并监测数据对象的成形,以提供对
undo/redo 的支撑及革新绑定到数码的 UI。

             3.)Persistent Store Coordinator 持久化存储协调者

             相当于数据文件管理器,处理底层的对数据文件的读取与写入。一般我们不必与它打交道。

             4. )Managed Object 管理的对象

             数据对象,与 Managed Object Context 相关联。

       — 代码访问步骤:

           1.
)先河化NSManagedObjectModel对象,加载模型文件,读取app中的所有实体消息

             2.
)起先化NSPersistentStoreCoordinator对象,添加持久化库(这里运用SQLite数据库)

             3.
)伊始化NSManagedObjectContext对象,得到这个上下文对象操作实体,举办增删改查(CRUD)操作

              代码如下:

              // 获取应用程序资源束下的数目实体

              NSManagedObjectModel *model =
[NSManagedObjectModel mergedModelFromBundles:nil];

          // 以博得的实业最先化持久化存储的协调者(中间桥梁)

       NSPersistentStoreCoordinator *psc =
[[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:model];

          // 在指定目录下创办持久化存储,基于sqlite类型

       NSString *docs =
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES) lastObject];

          NSURL *url = [NSURL fileURLWithPath:[docs
stringByAppendingPathComponent:@”my.db”]];

          NSError *err = nil;

          NSPersistentStore *store = [psc
addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url
options:nil error:&err];

    // 若创造持久化存储失利,则抛出特别

    if (store == nil) {

        NSLog(@”error”);

        [NSException raise:@”error” format:@”%@”,[err
localizedDescription]];

    }

          // 创设数量操作的上下文,并指定其持久化存储的协调者

          context = [[NSManagedObjectContext alloc] init];

          context.persistentStoreCoordinator = psc;     

       — 将Core Data中的 实体 与 代码中的 数据模型 对应

           Core Data中的实体都是NSManagedObject类型的。

           创设继承自NSManagedObject的子类

           New file->iOS->Core Data-> NSManagedObject

           这样在代码中可经过 favorite.NewsId
来访问实体性质,而不是事先的 [nsManagedObject setValue: forKey:],
[nsManagedObject valueForKey:];

 

       — 增,删,改,查

            增: // 先以数据实体为原型生成一个实体对象

                   Favorite *fr =
[NSEntityDescription insertNewObjectForEntityForName:@”Favorite” inManagedObjectContext:context];

                   // 赋值操作

                   // 通过上下文保存此次增添

                   [context save:&err];

            删:// 先最先化抓取数据的伸手,指定其抓取何体系型的实体对象

                  [[NSFetchRequest alloc]
initWithEntityName:@”Favorite”];

                  // 指定其筛选数据的规范

                  request.predicate =
[NSPredicate predicateWithFormat:@”newsId = %@”,@(objId)];

                  // 执行抓取请求

                  [context executeFetchRequest:request error:nil];

                  // 删除找到的数量

                  [context deleteObject:obj];

                   // 务必通过上下文同步到数量存储

                   [context save:&err];

             改: //
先伊始化抓取数据的请求,指定其抓取何序列型的实业对象

                  [[NSFetchRequest alloc]
initWithEntityName:@”Favorite”];

                  // 指定其筛选数据的准绳

                  request.predicate =
[NSPredicate predicateWithFormat:@”newsId = %@”,@(objId)];

                  // 执行抓取请求

                  [context executeFetchRequest:request error:nil];

                  // 修改实体对象的值

                  // 务必通过上下文同步到多少存储

                   [context save:&err];

            

               查: //
先起先化抓取数据的乞请,指定其抓取何序列型的实体对象

                  [[NSFetchRequest alloc]
initWithEntityName:@”Favorite”];

                  // 指定其筛选数据的基准

                  request.predicate =
[NSPredicate predicateWithFormat:@”newsId = %@”,@(objId)];

                  // 执行抓取请求

                  [context executeFetchRequest:request error:nil];

网站地图xml地图