iOS开发 CoreData笔记

CoreData是数据存储的一种方式,CoreData实质也是对SQLite的封装。 CoreData是iOS SDK里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据。使用CoreData框架,程序员可以很轻松有效地通过面向对象的接口管理数据。 CoreData框架提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite3数据库文件中,也能够将保存在数据库中的数据还原成OC对象。 在实际开发中,新建项目的时候会看到有Use Core Data的选项。

图1

CoreData和SQLite的最大区别在于:SQLite使用的是SQL语句,属于面向过程。而CoreData不适用SQL语句,将这一过程封装成面向对象。将表,字段,记录分别封装成实体,属性和对象,更符合面向对象的思想。 再回到项目中,新建项目之后会发现相比较于普通项目,CoreData项目多了一个后缀名为xcdatamodeld的文件

图2

在AppDelegate.h文件中会多出了三个属性和两个方法。还会自动导入CoreData框架

图3

在AppDelegate.m文件中会多出一些属性的get方法和方法的实现(从47行-125行)

图4

添加实体 点击xcdatamodeld文件->点击AddEntity->再双击上方的实体名,输入想要的实体名。(注意:实体名一定要大写)

图5

点击右侧的Attributes下方的+号可以添加属性

图6

添加对象 添加对象之前我们先来了解一下CoreData的主要对象。如下所示: NSManagedObjectContext:也可以称为托管对象上下文,负责应用和数据库之间的交互(CRUD)也就是说用来存东西的。 NSPersistentStoreCoordinator:持久化存储协调器。添加持久化存储库(如SQLite数据库),是物理数据存储的物理文件和程序之间的联系的桥梁,负责管理不同对象上下文,用来存储上下文的 NSManagedObjectModel:被管理的对象模型,对应定义的模型文件。管理对象的属性(字段)。 NSEntityDescription:实体描述(往数据库填东西的时候一定要先创建一个实体描述。可以看做是指定表名的东西)

/**
*托管对象上下文,增删改查都需要它
*/
@property(readonly,strong,nonatomic)NSManagedObjectContext*managedObjectContext;
/**
*托管对象模型文件
*实际上这个对象就是将xcdatamodel文件和此对象做一个关联。转换出来变为对象
*/
@property(readonly,strong,nonatomic)NSManagedObjectModel*managedObjectModel;
/**
*持久化储存协调器
*实际上就是应用程序与数据库之间建立的桥梁
*/
@property(readonly,strong,nonatomic)NSPersistentStoreCoordinator*persistentStoreCoordinator;
/**
*保存托管对象上下文的内容,增删改之后都要执行此方法
*当保存时,托管对象上下文的内容就会通过持久化存储协调器进行数据的保存,并且按照模型文件一一对应保存。
*/
- (void)saveContext;
/**
*应用程序文档目录,也就是CoreData保存的文件的目录
*
*@return文件保存路径
*/
- (NSURL*)applicationDocumentsDirectory;
在ViewController里面导入AppDelegate头文件
- (void)viewDidLoad {
[superviewDidLoad];
//使用CoreData添加数据
AppDelegate*appDelegate = [UIApplicationsharedApplication].delegate;
self.manageObjectContext= [appDelegatemanagedObjectContext];
[self insertData];
[self updateData];
}
- (void)insertData {
NSEntityDescription*entity = [NSEntityDescriptionentityForName:@"Person"inManagedObjectContext:self.manageObjectContext];
Person*person = [[Personalloc]initWithEntity:entityinsertIntoManagedObjectContext:self.manageObjectContext];
person.name=@"钢铁侠";
person.age=@40;
person.height=@180;
__autoreleasingNSError*error;
[self.manageObjectContextsave:&error];
if(error) {
NSLog(@"数据添加失败");
}else{
NSLog(@"数据添加成功");
}
}
修改数据的方法:修改数据的方法只需要直接修改对象的属性即可,再保存上下文。
在属性列表里添加属性
@property(nonatomic,strong)Person*selectedPerson;
在插入数据方法的方法里面将创建的对象赋值给selectedPerson
self.selectedPerson= person;
实现方法
- (void)updateData{
//修改数据
self.selectedPerson.name=@"Mark47";
self.selectedPerson.age=@1;
__autoreleasingNSError*error;
//保存数据
[self.manageObjectContextsave:&error];
if(error) {
NSLog(@"数据更新失败");
}else{
NSLog(@"数据更新成功");
}
}
删除数据:删除数据只要执行deleteObject方法,然后在保存上下文即可
- (void) deleteData{
  [self.manageObjectContextdeleteObject:self.selectedPerson];
  __autoreleasingNSError*error;
  [self.manageObjectContextsave:&error];
  if(error) {
      NSLog(@"数据删除失败");
  }else{
      NSLog(@"数据删除成功");
  }
}
复制代码

未完待续……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值