iOS应用数据存取之数据库存储-----Core Data

iOS应用数据存取的经常使用方式有以下几种 XML属性列表 —— PList NSKeyedArchiver 归档 Preference(偏好设置) SQLite3 Core Data程序员

如今我想记录如下我对core Data的认识 存在理由:苹果公司为了关照不会使用SQL数据库的程序员,而产生的,面向对象操做数据库的oc语言 Core Data简介: Core Data 是iOS SDK 里的一个很强大的框架,容许程序员以面向对象的方式储存和管理数据。使用Core Data框架,程序员能够很轻松有效地经过面向对象的接口管理数据 Core Data框架提供了对象-关系映射(ORM)的功能,即可以将OC对象转化成数据,保存在SQLite3数据库文件中,也可以将保存在数据库中的数据还原成OC对象 在数据操做过程当中,无需编写任何SQL语句 要使用Core Data,须要导入CoreData框架sql

NSPersistentStoreCoordinator的产生: 为了让模型对象和数据库可以链接起来,苹果公司就建立了NSPersistentStoreCoordinator这个对象,用来做为他们之间的桥梁! [NSManagedObjectModel mergedModelFromBundles:nil];合并全部的图形化定义的Mode--------------》[[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]:创建持久化存储调度---------------> addPersistentStoreWithType:指定数据库文件保存的路径,若是有,直接打开,若是没有,新建在打开---------------> _sharedContext.persistentStoreCoordinator = store;得到数据库操做句柄数据库

具体使用以下 // 1. 实例化持久化的存储 // 1.1 从Bundle中加载被管理的数据模型 NSManagedObjectModel *model = [NSManagedObjectModel mergedModelFromBundles:nil]; // 1.2 实例化持久化存储调度 NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model]; ... // 1.3 添加持久化存储(SQLite)- [store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:&error]; ...---------------这里咱们是否是能够添加持久化存储为sql数据库呢????? // 管理对象上下文 _context = [[NSManagedObjectContext alloc] init]; _context.persistentStoreCoordinator = store;框架

NSEntityDescription insertNewObjectForEntityForName 实体(数据库的表)的描述(最开始创建数据模型时指定的实体) 实体描述,用于描述我的信息的一个对象 Context,统一负责数据库的操做 实例: Person *p = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:_context]; p.name = @"张三"; p.age = @18; [_context save:nil];fetch

执行查询以后url

  1. Sections属性中记录了分组状况,若是没有指定分组,则是全部对象! Sections对象遵照了NSFetchedResultsSectionInfo协议!
  2. 使用objectAtIndexPath能够直接取出查询的结果。
  3. 设置查询结果控制器的代理方法,而且实现 controllerDidChangeContent:(NSFetchedResultsController *)controller 代理方法,能够在数据库内容发生变化时,从新刷新表格便可 全部数据变化,尽在掌控!

查询数据——NSFetchedResultsController NSManagedObjectContext *context = [[DataManager sharedDataManager] sharedContext]; NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; // 定义查询排序 NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; request.sortDescriptors = @[sort]; // 定义查询结果控制器 _fetchedResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil]; [_fetchedResultController performFetch:&error];代理

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Person"]; request.predicate = [NSPredicate predicateWithFormat:@"%K LIKE '52' OR name CONTAINS '三'", @"phoneNo"]; NSArray *array = [_context executeFetchRequest:request error:nil];orm


最后,在开发中要注意 若是开发过程当中,修改了数据模型,简单的办法就是将沙盒中的数据库直接删除! 不然运行会崩溃!对象

相关文章
相关标签/搜索