CoreData用于做数据持久化,适合大数据量的存储和查询

CoreData不是数据库 CoreData可以使用数据库 ,XML等方式来存储数据

CoreData使用面向对象的方式操作数据

CoreData操作数据无需编写SQL语句

使用时 需要导入CoreData框架

//----------------------------------------------------------

NSManagedObjectContext 负责应用和数据库之间的交互

NSPersistentStoreCoordinator 添加持久化存储库(初始化后 给其初始化一个数据文件)

NSManagedObjectModel 被管理的对象模型

NSEntityDescription :实体描述  向实体中添加数据-->给context保管

 
#import "ViewController.h"
#import <CoreData/CoreData.h>
#import "User.h"
#import "Movie.h"

@interface ViewController (){
   
    NSManagedObjectContext *_context;
}

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
   
    //打开数据库
    [self openDataBase];
    //添加数据
//    [self addUser];
    //查询数据
    [self queryData];
    //修改数据
//    [self updateData];
    //删除数据
    [self deleteData];
   
    NSLog(@"-------------------------");
    [self queryData];
   
}

- (void)openDataBase{
   
    //1.NSManagedObjectModel 加载数据模型文件
    NSURL *url = [[NSBundle mainBundle]URLForResource:@"MyData" withExtension:@"momd"];
   
    NSManagedObjectModel *objectModel = [[NSManagedObjectModel alloc]initWithContentsOfURL:url];
   
    //2.创建 持久化存储库 带有(载入)数据模型文件
    NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc]initWithManagedObjectModel:objectModel];
   
    //持久化存储库 存放到路径
    NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/MyData.sqlite"];
   
    NSLog(@"filePath : %@",filePath);
    NSURL *url1 = [NSURL fileURLWithPath:filePath];
   
    NSError *error = nil;
    //3.设置 持久化存储库
    [psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:url1 options:nil error:&error];
    if (error) {
        NSLog(@"开启失败");
    }else{
        NSLog(@"开启成功");
    }
   
    _context = [[NSManagedObjectContext alloc]init];
   
    //context 中的数据存储到指定的 "psc" 中(一次指定后面都不会用psc了) -->后面所有操作对context操作
    _context.persistentStoreCoordinator = psc;

}

- (void)addUser{
   
    //添加 实体 数据---->向User实体中添加数据-->给context保管
    User *user = [NSEntityDescription insertNewObjectForEntityForName:@"User" inManagedObjectContext:_context];
   
    user.name = @"张杰";
    user.age = @22;
    user.height = @177;
   
    Movie *movie = [NSEntityDescription insertNewObjectForEntityForName:@"Movie" inManagedObjectContext:_context];
   
    movie.movieName = @"速度与激情";
    movie.movieID = @1003;
    movie.price = @152;

Movie *movie1 = [NSEntityDescription insertNewObjectForEntityForName:@"Movie" inManagedObjectContext:_context];
   
    movie1.movieName = @"恋爱男女";
    movie1.movieID = @1004;
    movie1.price = @112;

//添加数据后保存数据
    BOOL isSuccess = [_context save:nil];
    if (isSuccess) {
        NSLog(@"添加成功");
    }else{
        NSLog(@"添加失败");
    }
   
   
   
}

- (void)queryData{
   
   
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"User"];
    NSFetchRequest *request2 = [NSFetchRequest fetchRequestWithEntityName:@"Movie"];
   
    // 在context中查询(context相当于容器)
    NSArray *dataArr = [_context executeFetchRequest:request error:nil];
    NSArray *arr2 = [_context executeFetchRequest:request2 error:nil];
   
  
    for (User *model in dataArr) {
        NSLog(@"%@ %@ %@",model.name,model.age,model.height);
    }
    for (Movie *model in arr2) {
        NSLog(@"%@ %@ %@",model.movieName,model.movieID,model.price);
    }
   
   
   
   
   
}
//修改数据
- (void)updateData{
   
    //查询找到需要修改的数据
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Movie"];
    //请求 设置请求条件
    request.predicate = [NSPredicate predicateWithFormat:@"movieID = 1004"];
    //查询-->结果
    NSArray *dataArr = [_context executeFetchRequest:request error:nil];
   
    //拿到查询到的数据
    for (Movie *model in dataArr) {
        //遍历出来 修改数据
        model.movieName = @"大话西游";
    }
   
    //修改完成 保存
    BOOL isSuccess = [_context save:nil];
    if (isSuccess) {
        NSLog(@"修改成功");
    }else{
       
        NSLog(@"修改失败");
    }
   
   
}

- (void)deleteData{
   
    //查询数据
    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Movie"];
    request.predicate = [NSPredicate predicateWithFormat:@"movieID=1004"];
    NSArray *arr =[_context executeFetchRequest:request error:nil];
    for (Movie *model in arr) {
        //context删除数据
        [_context deleteObject:model];
    }
   
    //删除数据后保存
    [_context save:nil];
   
   
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.

}

最新文章

  1. 【WP开发】读写剪贴板
  2. MS SQL验证字符串是否包含有大小写字母
  3. nullcon HackIM 2016 -- Crypto Question 2
  4. JS魔法堂:再识Number type
  5. 15个最好的PDF转word的在线转换器,将PDF文件转换成doc文件
  6. BZOJ1015 并查集
  7. WeakReference(弱引用)
  8. MyEclipse常用操作技巧
  9. 运行 Docker 容器时的安全风险:别丢了你的套接字
  10. 完全靠代码生成的ios版hello,world
  11. 关于控制文件和redo log损坏的恢复
  12. UVA796- Critical Links(无向图中的桥梁)
  13. Select In SQL Server-Cross Instance in same domain and different domain
  14. mysql alter总结
  15. Linux - 通过LVM对磁盘进行动态扩容
  16. wp系统笔记
  17. Missile Command 导弹指令
  18. 变量和关系符和JAVA基本类型笔记与常考面试题
  19. (后端)org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1,actual 0
  20. 位运算符和unity Layers

热门文章

  1. 第四十一章 微服务CICD(3)- jenkins + gitlab + webhooks + publish-over-ssh(1)
  2. Flash Builder 调试器无法连接到正在运行的应用程序(57%)
  3. Visual Studio 2010 插件之Resharper
  4. POJ3020 匹配
  5. Java 基础之-枚举
  6. new(C# 参考)
  7. java class的兼容问题
  8. aspnet超级链接 传递 当前页面 textbox值
  9. [转]centos6.6 rpm安装与管理
  10. Hibernate查询