CoreData和管理者MagicalRecord

来源:互联网 发布:联合国数据库中文版 编辑:程序博客网 时间:2024/05/22 06:15

CoreData

使用Core Data能让你为Model层写的代码的行数减少为原来的50%到70%,它能利用Model层的信息和运行时的特性,而不通过程序层的代码实现。coreData主要是iOS对sqlite数据库的封装。coreData有对象-关系的映射的功能,能把OC的对象存储成数据库或xml,如果数据存储使用的是coreData,那么读取时可以不使用SQL语句。coreData 类似于 我们之前使用的FMDB

coredata步骤

model:
在声明property属性后,有2种实现选择
@synthesize
编译器期间,让编译器自动生成getter/setter方法。
当有自定义的存或取方法时,自定义会屏蔽自动生成该方法

@dynamic
告诉编译器,不自动生成getter/setter方法,避免编译期间产生警告
然后由自己实现存取方法
或存取方法在运行时动态创建绑定:主要使用在CoreData的实现NSManagedObject子类时使用,由Core Data框架在程序运行的时动态生成子类属性

#import <Foundation/Foundation.h>#import <MagicalRecord/MagicalRecord.h>@interface UserModel : NSManagedObject@property (nonatomic) NSString *name;@property (nonatomic) NSNumber *age;@end#import "UserModel.h"@implementation UserModel@dynamic name;@dynamic age;@end

创建Core Data文件
new file->文件名(任意-作为数据库名) ENTITIES 的名称和model的类名相同,attributes为属性名重点内容

初始化

- (void)initCoreData{    //1.取出模型文件    NSString *path = [[NSBundle mainBundle] pathForResource:@"UserModel" ofType:@"momd"];    //2.模型文件对应的类    NSManagedObjectModel *modelFile = [[NSManagedObjectModel alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]];    //3.创建一个协调器    NSPersistentStoreCoordinator *coordinaor = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:modelFile];    //4.创建数据库    NSString *dbPath = [NSString stringWithFormat:@"%@/Documents/user.sqlite",NSHomeDirectory()];    //5.数据库和模型文件关联上    NSPersistentStore * store = [coordinaor addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:dbPath] options:nil error:nil];    if(!store)    {    }    //6.创建上下文对象,增删改查 通过上下文对象进行操作的    _context = [[NSManagedObjectContext alloc] init];    _context.persistentStoreCoordinator = coordinaor;   }

添加

- (IBAction)add:(id)sender {    UserModel *item = (UserModel *)[NSEntityDescription insertNewObjectForEntityForName:@"UserModel" inManagedObjectContext:_context];    item.name = self.name.text;    item.age = @(self.age.text.integerValue);    NSError *err = nil;    //增删改,写入到数据库    if (![_context save:&err]) {        NSLog(@"err = %@",err.description);    }}

删除

- (IBAction)delete:(id)sender {    //找到删除的数据    NSArray *arr = [self fetchDataWithName:self.name.text];    for (UserModel *item in arr) {        [_context deleteObject:item];    }    NSError *err = nil;    //增删改,写入到数据库    if (![_context save:&err]) {        NSLog(@"err = %@",err.description);    }}

修改

- (IBAction)modify:(id)sender {    //找到修改的数据    NSArray *arr = [self fetchDataWithName:self.name.text];    for (UserModel *item in arr) {        item.age = @(self.age.text.integerValue);    }    NSError *err = nil;    //增删改,写入到数据库    if (![_context save:&err]) {        NSLog(@"err = %@",err.description);    }}

查询

- (NSArray *)fetchDataWithName:(NSString *)name{    //请求查询对象    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];    //设置查询entity    fetchRequest.entity = [NSEntityDescription entityForName:@"UserModel" inManagedObjectContext:_context];    //设置查询条件    if (name) {        NSPredicate * predicate = [NSPredicate predicateWithFormat:@"name = %@",name];        fetchRequest.predicate = predicate;    }    //设置排序    NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];    NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];    fetchRequest.sortDescriptors = @[sort1,sort2];    //把查询内容通过数组返回去    return [_context executeFetchRequest:fetchRequest error:nil];}

MagicalRecord

//创建数据库

    [MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"user.sqlite"];

添加

- (IBAction)add:(id)sender {    //根据coreData模型创建一个UserModel对象    UserModel *item = [UserModel MR_createEntity];    item.name = self.name.text;    item.age = @(self.age.text.integerValue);    //存到数据库中    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];}

删除

- (IBAction)delete:(id)sender {    //删除的数据    NSArray *arr = [UserModel MR_findByAttribute:@"name" withValue:self.name.text];    for (UserModel *item in arr) {        [item MR_deleteEntity];    }    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];  }

修改

- (IBAction)mdify:(id)sender {    NSArray * arr = [UserModel MR_findByAttribute:@"name" withValue:self.name.text];    for (UserModel *item in arr) {        item.age = @(self.age.text.integerValue);    }    [[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];}

查询

- (IBAction)query:(id)sender {    NSArray * arr = [UserModel MR_findAllSortedBy:@"age" ascending:YES];    [self.data removeAllObjects];    [self.data addObjectsFromArray:arr];    [self.tableView reloadData];}
0 0
原创粉丝点击