CoreData的简单创建和增删改查

使用步骤:
1、创建模型文件 相当于数据库
2、添加实体 相当于表
3、创建实体类 相当于模型类
4、生成上下文,用于关联模型文件生成数据库
5、保存对象到数据库
6、从数据库获取对象
7、更新数据
8、删除数据

1、模型文件在新建文件里的CoreData下的Data Model
2、点击相应的模型文件在右侧下方有“Add Entity”按钮,用于添加实体,之后表选项在相应表的Attribute处增加
3、实体类在新建文件里的CoreData下的 NSManagedObject subclass,创建过程中勾选表
4、生成上下文之前
在targets的build phases的Link Binary With Libraries加入CoreData.framework然后#import 《CoreData/CoreData.h》
@property(strong,nonatomic)NSManagedObjectContext *context;

//创建上下文
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
//后面的步骤是关联模型文件
//创建一个模型对象(传一个nil会把bundle下的所有模型文件关联起来)
NSManagedObjectModel *model = [NSManagedObjectModel mergeModelFromBundles:nil];
//持久化存储调度器
NSPersistentStoreCoordinator *store = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
//存储数据库的名字
NSError *error = nil;
//获取document目录
NSString *doc = [NSSearchPathForDirectoriseInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//数据库保存的路径
NSString *sqlitePath = [doc stringByAppendingPathComponent:@"company.sqlite"];
[store addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[NSURL fileURLWithPath:sqlitePath] options:nil error:&error];
context.persistentStoreCoordinator = store;
self.context = context;

5、添加数据之前要先在viewDidLoad调用[self setupContext];
//创建员工

Emoloyee *emp1 = [NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManageObjectContext:self.context];
//设置员工属性
emp1.name = @"zhangsan";
emp1.age = @28;
emp1.height = @1.80;
//通过上下文保存
NSError *error = nil;
[self.context save:&error];
if(!error){
NSLog(@"success");}
else{
NSLog(@"%@",error);}

6、从数据库读取信息

//创建一个请求对象(填入要查询的实体类-表名)
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Employee"];
//读取信息
NSError *error = nil;
//emps就是查找到的数据
NSArray *emps = [self.context executeFetchRequest:request error:&error];
if(!error){
    NSLog(@"emps:%@",emps);
    for(Employee *emp in emps){
        NSLog(@"%@ %@ %@",emp.name,emp.age,emp.height);}
else{NSLog(@"%@",error);

做过滤查询的时候设置request的predicate属性就好
结果排序设置request的sortDescriptors属性

7、所有的操作都是暂时在内存里,必须要调用save来同步数据库,否则无法保存。
本博客中emps只是一个NSArray,更新数据时要先新建一个Employee对象指向emps来修改。

Employee *emp = emps[0];
emp.height = @1.7;

8、删除数据是查询到emps数据后

for(Employee *emp in emps){
    [self.context deleteObject:emp];}
[self.context save:nil]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值