CoreData对于开发者来说是比较方便的,但是它的效率很低,比起sqlite没有它的执行效率高.苹果也在推CoreData但是现在用的还不是太多,
但是对于程序员来说,CoreData是比较简单方便的.
下面我们一起来学习一下CoreData:
首先我们要创建工程的时候勾选创建CoreData选项
然后新建一个继承与NSObject的类CoreDataManager引入头文件
#import <CoreData/CoreData.h>
将AppDelegate里关于CoreData的代码剪切到CoreDataManager类中
创建一个单例方法来获取对象
+ (CoreDataManager *)shareCoreDataManager;
//单例方法
+ (CoreDataManager *)shareCoreDataManager{
static CoreDataManager *manager = nil;
//保证线程安全,该方法只走一次
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [[CoreDataManager alloc] init];
});
return manager;
}
目前为止我们的准备工作已将做好了
然后在工程名.xcdatamodeld的文件下条件你想要存储数据的属性
添加
-(void)add:(id)sender{
Image *image = [NSEntityDescription insertNewObjectForEntityForName:@"Image" inManagedObjectContext:self.manager.managedObjectContext];
image.imageName = @"0.jpg";
image.imageData = self.imageData;
image.imageDesc = @"不错呦";
[self.manager saveContext];
}
//搜索fec是关键字
-(void)selectAll{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Image" inManagedObjectContext:self.manager.managedObjectContext];
[fetchRequest setEntity:entity];
// Specify criteria for filtering which objects to fetch
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"<#format string#>", <#arguments#>];
// [fetchRequest setPredicate:predicate];
// // Specify how the fetched objects should be sorted
// NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"<#key#>"
// ascending:YES];
// [fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]];
NSError *error = nil;
NSArray *fetchedObjects = [self.manager.managedObjectContext executeFetchRequest:fetchRequest error:&error];
if (fetchedObjects == nil) {
NSLog(@"%@",error);
}
NSLog(@"%@",fetchedObjects);
[self.array setArray:fetchedObjects];
[self.tableView reloadData];
在创建完之后还要在editor里面选择创建对应的NSManagedObject然后引入.h头文件
版本的迭代
在editor里选择add Model Verson 即可,然后更改当前选中Model即可
数据的迁移
需要在CoreDataManage的- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
函数中加入
// 填写配置信息 1是否允许升级 2桥接
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES],NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES],NSInferMappingModelAutomaticallyOption, nil];
新建文件选择mapping Model即可