coredata的入门使用方法

我们只需要在创建项目文件的时候勾选使用coreData的选项,系统就会帮我们创建一个包含CoreData的项目文件。

然后在界面上就会出现下面的变化。我们点击添加属性按钮,就能在数据库中给数据模型添加属性。

添加完数据库后我们进行下面操作就能将数据模型转为代码文件。

做完上面操作之后我们就能对数据库模型进行操作了。

我们在操作数据,对数据进行增删改查的时候,都需要用到Core Data stack这个工具。我们自己可以封装一个Core Data stack,这样更能加深我们对Core Data stack这个工具的理解。
下面是封装一个工具类的代码:

#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>

#define KXBCoreManagerInstance [HMCoreDataStackManager shareInstance]

@interface HMCoreDataStackManager : NSObject

///单例
+(HMCoreDataStackManager*)shareInstance;

///管理对象上下文
@property(strong,nonatomic)NSManagedObjectContext *managerContenxt;

///模型对象
@property(strong,nonatomic)NSManagedObjectModel *managerModel;

///存储调度器
@property(strong,nonatomic)NSPersistentStoreCoordinator *maagerDinator;

//保存数据的方法
-(void)save;

@end

然后是.m文件中的代码

 

#import "HMCoreDataStackManager.h"

@implementation HMCoreDataStackManager

///单例的实现
+(HMCoreDataStackManager*)shareInstance
{
  static HMCoreDataStackManager *instance = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    instance = [[HMCoreDataStackManager alloc]init];
  });

  return instance;
}

-(NSURL*)getDocumentUrlPath
{
 ///获取文件位置
 return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]
  ;
}

//懒加载managerContenxt
-(NSManagedObjectContext *)managerContenxt
{
  if (_managerContenxt != nil) {

    return _managerContenxt;
  }

  _managerContenxt = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSMainQueueConcurrencyType];

  ///设置存储调度器
  [_managerContenxt setPersistentStoreCoordinator:self.maagerDinator];

  return _managerContenxt;
}

///懒加载模型对象
-(NSManagedObjectModel *)managerModel
{

  if (_managerModel != nil) {

    return _managerModel;
  }

  _managerModel = [NSManagedObjectModel mergedModelFromBundles:nil];

  return _managerModel;
}

-(NSPersistentStoreCoordinator *)maagerDinator
{
  if (_maagerDinator != nil) {

    return _maagerDinator;
  }

  _maagerDinator = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:self.managerModel];

  //添加存储器
  /**
  * type:一般使用数据库存储方式NSSQLiteStoreType
  * configuration:配置信息 一般无需配置
  * URL:要保存的文件路径
  * options:参数信息 一般无需设置
  */

  //拼接url路径
  NSURL *url = [[self getDocumentUrlPath]URLByAppendingPathComponent:@"sqlit.db" isDirectory:YES];

  [_maagerDinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url options:nil error:nil];

  return _maagerDinator;
}

-(void)save
{  ///保存数据
  [self.managerContenxt save:nil];
}
@end

增删改查我们同样需要使用自定义的Core Data stack工具类。
增加数据:

Person *p = [NSEntityDescription insertNewObjectForEntityForName:@"Person" in Managed ObjectContext : kManagedObjectContext.managedObjectContext];
 p.age = @(13);
 p.name = @"张三"; 
[kManagedObjectContext save];

删除数据:

//1.创建一个查询请求
 NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Person"]; 
//2.创建查询谓词(查询条件) 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@",@"张三"];
 //3.给查询请求设置谓词
 request.predicate = predicate; 
//4.查询数据
 NSArray<Person*> *arr = [kManagedObjectContext.managedObjectContext executeFetchRequest:request error:nil]; 
//5.删除数据
 [kManagedObjectContext.managedObjectContext deleteObject:arr.firstObject]; 
//6.同步到数据库 [kManagedObjectContext save];

修改数据:

//1.创建一个查询请求 
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Person"]; 
//2.创建查询谓词(查询条件) 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@",@"张三"];
 //3.给查询请求设置谓词
 request.predicate = predicate;
 //4.查询数据 
NSArray<Person*> *arr = [kManagedObjectContext.managedObjectContext executeFetchRequest:request error:nil]; 
//5.改变数据
 arr.firstObject.name = @"李四";
 arr.firstObject.age = @(18);
 //6.同步到数据库
 [kManagedObjectContext save];

查询数据:

//1.创建一个查询请求 
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Person"];
 //2.创建查询谓词(查询条件) 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@",@"张三"]; 
//3.给查询请求设置谓词 
request.predicate = predicate; 
//4.查询数据 
NSArray<Person*> *arr = [kManagedObjectContext.managedObjectContext executeFetchRequest:request error:nil]; NSLog(@"%@====%@",arr.firstObject.name,arr.firstObject.age);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值