1>. CoreData历史
2>. CoreData数据库框架的优势
sqlite:①. 基于C接口,需要使用SQL语句,代码繁琐
②. 在处理大量数据时,表关系更直接
③. 在OC中不是可视化的
CoreData:①. 可视化,有undo/redo能力
②. 可以实现多种文件格式NSSQLiteStoreType、
NSBinaryStoreType、NSInMemoryStoreType、NSXMLStoreType
③. 苹果官方API支持,与iOS结合更紧密
3>. CoreData核心对象
实体管理类:NSManagedObject
实体描述类:NSEntityDescription
实体管理器类:NSManagedObjectContext
实体连接类:NSPersistenStoreCoordinator
数据模型器类:NSManagedObjectModel
4>. CoreData核心类关系

1>. 持久化存储和存储文件
2>. 被管理对象上下文
3>. 被管理对象相关类
4>. 数据查询类
1>. 创建实体类与属性
2>. 使用 Use Core Data 时系统已经声明的属性和实现的方法
#import <UIKit/UIKit.h> #import <CoreData/CoreData.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @property (strong, nonatomic) UIWindow *window; @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; // 数据管理器类,临时数据库 @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; // 数据模型器类,包含多个实体,实体中设置的属性,
实体名称等,可以认为是一个实体集合,相当于数据库中的表 @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; // 数据连接器类,
连接磁盘与内存中的临时数据库 - (void)saveContext; - (NSURL *)applicationDocumentsDirectory; @end
具体的实现方法
3>. 使用CoreData实现增删改查
// 封装一个插入学生的方法
- (void)insertStudentWithName:(NSString *)name gender:(NSString *)gender age:(NSNumber *)age {
// 1、增加数据,插入数据
/*
NSManagedObjectModel *managedObjectModel =
[[context persistentStoreCoordinator] managedObjectModel];
NSEntityDescription *entity =
[[managedObjectModel entitiesByName] objectForKey:entityName];
NSManagedObject *newObject = [[NSManagedObject alloc]
initWithEntity:entity insertIntoManagedObjectContext:context];
return newObject;
*/
Student *stu = [NSEntityDescription insertNewObjectForEntityForName:@"Student" inManagedObjectContext:self.managedObjectContext]; // 在临时数据库中,按照实体Student,加载出一个视图管理对象(数据模型)
// 模型赋值有两种:KVC,属性点语法
stu.name = name;
[stu setValue:gender forKey:@"gender"];
stu.age = age;
// 数据管理类执行同步操作,将数据写入数据库
[self.managedObjectContext save:nil];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// coreData完成增删改查
// 1、增加数据,插入数据
// 创建模型
// [self insertStudentWithName:@"巴达" gender:@"雄" age:@20];
// [self insertStudentWithName:@"大宝" gender:@"女" age:@10];
// [self insertStudentWithName:@"秋香" gender:@"雌" age:@18];
// 2、查询数据
// 创建查询请求对象
// NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Student"]; // 这样的数据请求对象得到的是数据库中的所有记录
//
// // 让数据管理对象执行请求
// NSArray *array =[self.managedObjectContext executeFetchRequest:request error:nil];
// for (Student *stu in array) {
// NSLog(@"name is %@, gender is %@, age is %@", stu.name, stu.gender, stu.age);
// }
// 为了更加方便的完成查询操作,查询请求可以添加谓词和排序
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// 得到一个实体描述
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Student" inManagedObjectContext:self.managedObjectContext];
request.entity = entity;
// 添加谓词
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name like %@ or gender = %@", @"*香*", @"女"];
// request.predicate = predicate;
// NSArray *array = [self.managedObjectContext executeFetchRequest:request error:nil];
// for (Student *stu in array) {
// NSLog(@"name is %@, gender is %@, age is %@", stu.name, stu.gender, stu.age);
// }
// 添加排序
// NSSortDescriptor *descripor = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES]; // 创建按照年龄升序排列的排序条件
// request.sortDescriptors =@[descripor];
// NSArray *array = [self.managedObjectContext executeFetchRequest:request error:nil];
// for (Student *stu in array) {
// NSLog(@"name is %@, gender is %@, age is %@", stu.name, stu.gender, stu.age);
// }
// 3、修改数据
// 首先找到要修改的数据,修改完成后,同步到数据库
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", @"中二"];
// request.predicate = predicate;
// NSArray *array = [self.managedObjectContext executeFetchRequest:request error:nil];
// Student *student = [array objectAtIndex:0];
// student.name = @"中小二";
// student.gender = @"妖";
// // 修改完成后执行save
// [self.managedObjectContext save:nil];
//
// NSLog(@"name is %@, gender is %@, age is %@", student.name, student.gender, student.age);
// 4、删除数据
// 首先找到要删除的数据,然后让数据管理器对象执行delete方法
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name = %@", @"中小二"];
// request.predicate = predicate;
// NSArray *array = [self.managedObjectContext executeFetchRequest:request error:nil];
// Student *student = [array objectAtIndex:0];
// // 数据管理对象删除数据
// [self.managedObjectContext deleteObject:student];
//// [self.managedObjectContext deletedObjects]; // 删除临时数据库中某个试题中的所有数据
// [self.managedObjectContext save:nil];
NSLog(@"%@", [self applicationDocumentsDirectory]);
return YES;
}
4>. 小结
①. 关联要存储和操作的实体模型(实体模型由NSManagedObjectModel实体模型类取创建)
②. 指定存储的位置和文件类型
原文:http://www.cnblogs.com/hyl2012/p/5244502.html