您的位置:首页 > 其它

CoreData和管理者MagicalRecord

2015-10-26 21:17 92 查看

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];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: