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.

}

CoreData基础的更多相关文章

  1. coreData数据操作

    // 1. 建立模型文件// 2. 建立CoreDataStack// 3. 设置AppDelegate 接着 // // CoreDataStack.swift // CoreDataStackDe ...

  2. 从Windows角度看Mac OS X上的软件开发

    如果原来从事Windows软件开发,想跨足或转换至Mac OS X环境,需要知道那些东西?有什么知识技能可以快速运用在Mac OS X环境上的?这两个问题应该是Windows开发者进入Mac OS X ...

  3. iOS基础教程:在建好的项目中加入CoreData[转]

    这几天在做一个ios的小项目,项目中需要对数据进行基本的增删改查操作.于是就想用一把CoreData.但在创建项目初期,没有包含进CoreData.于是就在已建好的项目中加入CoreData.由于第一 ...

  4. 优于CoreData的Realm数据库基础教程

    Realm 是一个跨平台的移动数据库引擎,于 2014 年 7 月发布,准确来说,它是专门为移动应用所设计的数据持久化解决方案之一. Realm 可以轻松地移植到您的项目当中,并且绝大部分常用的功能( ...

  5. iOS基础 - 数据库CoreData

    一.iOS应用数据存取的常用方式 XML属性列表 —— PList NSKeyedArchiver 归档 Preference(偏好设置) SQLite3 Core Data 二.Core Data简 ...

  6. Swift基础之CoreData的使用

    以前使用过OC版本的CoreData应该很好理解Swift方式,所以这里简单的展示一下,增删改查的方法使用,同时给大家说一下创建步骤,方便大家的使用,转载请注明出处,谢谢~ 步骤一:创建一个Swift ...

  7. iOS-数据持久化-CoreData

    CoreData详解 介绍: 在Cocoa环境下,如果你想使用数据库(如sqlite),你可以使用sql语句的方式通过相关的工具类进行数据库的直接操作.当然你也可以通过别人封装之后的一些简单框架,使得 ...

  8. 【原】iOS学习之SQLite和CoreData数据库的比较

    1. SQLite数据库 sqlite数据库操作的基本流程是, 创建数据库, 再通过定义一些字段来定义表格结构, 可以利用sql语句向表格中插入记录, 删除记录, 修改记录, 表格之间也可以建立联系. ...

  9. MagicalRecord,一个简化CoreData操作的工具库

    简介 项目主页:https://github.com/magicalpanda/MagicalRecord 实例下载:https://github.com/ios122/MagicalRecord 在 ...

随机推荐

  1. (转载)自动化基础普及之selenium是啥?

    转载:http://www.cnblogs.com/fnng/p/3980093.html Selenium 并不像QTP那样让人一下子就明白是什么?它是编程人员的最爱,但它却对测试新手产生了很大的阻 ...

  2. Linux入门学习 常用命令

    cd命令 功能是切换到指定的目录:命令格式:cd [目录名]有几个符号作为目录名有特殊的含义:"/"代表根目录.".."代表上一级目录."~" ...

  3. Xcode中给控件添加颜色时自动显示出颜色

    在iOS开发中,给一些控件设置颜色的时候,设置完不能立马看到颜色.必须要运行程序之后才能看到设置的颜色,如果颜色有偏差再回代码改参数,然后再运行看颜色很是麻烦.令人高兴得是Xcode有很多功能强大插件 ...

  4. Winform打砖块游戏制作step by step第6节---双缓冲应用

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---双缓冲应用 1.  主界面截图如下: 2.  什么是双 ...

  5. xcode5.1+osx.10.9编译x264的问题

    最近忙于编译x264开源框架进行视频编码,百度了很多方法没有实现.很多方法都过时了.根本不能成功.因为在xcode5以后,编译器不在默认为gcc,而是Apple自带的clang编译器.本人试了很多方法 ...

  6. Paxos算法分析

    作者:吴香伟 发表于 2014/09/30 版权声明:可以任意转载,转载时务必以超链接形式标明文章原始出处和作者信息以及版权声明 一致性问题 如上图所示,服务器Ai(i=1,2,..5)组成存储集群, ...

  7. IOS 本地推送 IOS10.0以上 static的作用 const的作用

    //需要在AppDelegate里面启动APP的函数 加上 UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNot ...

  8. js二维数组与字符串

    1. 二维数组:数组中的元素,又引用了另一个数组对象 何时使用:只要保存横行竖列的数据, 具有上下级包含关系的数据, 创建二维数组: 1. var arr=[]; col arr[0]=[" ...

  9. Bootstrap组件

    1.Bootstrap组件——Glyphicons图标字体 图标字体:可以表示的文字不是abcd或1234,而是一个又一个图形符号,比直接使用图片好处:可以任意放大不会失真:所有能使用文字的地方都可以 ...

  10. project 2016 11 20 树的多项式

    #include <iostream>#include <stack>#include <cmath>#include <sstream> using ...