操作过程

  • Context想要获取值,先要告诉连接器,我要什么东西
  • 链接器再告诉store, 你给我什么东西, store去找
  • 找到之后返回给链接器,链接器再返回给Context               

CoreData和sqlite的区别

  • CoreData是一个框架;sqlite是苹果使用别人开发好的一个动态库,本质是关系型数据库.

  • CoreData是IOS平台下的一个数据持久化的方式;sqlite可以跨平台使用.

实现思路

  •   首先找到CoreData文件夹
  •   创建Person类,并且建立name属性

Command + N 创建

//代码实现

-------ViewController.h

#import "ViewController.h"
//coreData的框架
//导入框架的方式 : <框架名字/头文件名字>
#import <CoreData/CoreData.h>
#import "Person.h"
#import "AppDelegate.h" @interface ViewController ()<UITableViewDelegate, UITableViewDataSource> @property (nonatomic, strong) UITableView *tableView;
//临时数据库
@property (nonatomic, strong) NSManagedObjectContext *objectContext;
//数据源数组
@property (nonatomic, strong) NSMutableArray *dataArray; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.dataArray = [NSMutableArray array];
//获取到我们最开始使用的AppDelegate
AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate;
self.objectContext = app.managedObjectContext; //调用查询数据的方法
[self searchAll]; _tableView = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:(UITableViewStylePlain)];
[self.view addSubview:_tableView];
_tableView.delegate = self;
_tableView.dataSource = self;
[_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"]; self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:(UIBarButtonSystemItemAdd) target:self action:@selector(barButtonItemClicked)]; } - (void)barButtonItemClicked
{
//NSEntityDescription : 实体描述类,通过类方法创建
//第一个参数 : 表示这个实体描述类描述的是哪个实体 (表名)
//第二个参数 : 表示的是在context里边创建一个描述,告诉context我要往里面插入一个object了
NSEntityDescription *description = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:self.objectContext];
//创建一个实体类
//第一个参数 : 实体描述
//第二个参数 : 在context里面放入这个类
Person *person = [[Person alloc] initWithEntity:description insertIntoManagedObjectContext:self.objectContext]; int number = arc4random() % ;
person.name = [NSString stringWithFormat:@"%d号李四", number]; [self insertObject:person]; } //向coreData中插入一条数据
- (void)insertObject:(Person *)person
{ NSError *error = nil;
//把context保存到本地
//这个方法执行之后, 本地数据才发生了改变
[self.objectContext save:&error]; if (error == nil) {
[self.dataArray addObject:person];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.dataArray.count - inSection:];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationFade)];
}
} //搜索全部
- (void)searchAll
{
//创建一个查询操作, 查询哪个表里面的内容
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Person"]; //接收查询数据
NSError *error = nil;
//让context去执行查询操作, 并且返回一个结果数组
NSArray *array = [self.objectContext executeFetchRequest:request error:&error]; //判断error是否为nul
if (error == nil) {
[self.dataArray setArray:array]; [self.tableView reloadData];
}else
{
NSLog(@"查询失败 ");
}
} - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
//判断一下当前的编辑状态
if (editingStyle == UITableViewCellEditingStyleDelete) {
//获取到想要删除的那条数据
Person *person = self.dataArray[indexPath.row];
//在context中将这条数据删除
[self.objectContext deleteObject:person]; NSError *error = nil; [self.objectContext save:&error]; if (error == nil) {
//先删数据
[self.dataArray removeObject:person];
//然后更新UI
[self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationFade)];
}
}
} - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
//知道要改谁
Person *person = self.dataArray[indexPath.row]; int number = arc4random() % ;
person.name = [NSString stringWithFormat:@"%d号张三", number]; NSError *error = nil; [self.objectContext save:&error]; if (error == nil) {
[self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:(UITableViewRowAnimationFade)];
}
} - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.dataArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"forIndexPath:indexPath];
Person *person = self.dataArray[indexPath.row];
cell.textLabel.text = person.name; return cell;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} @end

CoreData __ 基本原理的更多相关文章

  1. Ognl表达式基本原理和使用方法

    Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...

  2. Android自定义控件之基本原理

    前言: 在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的要求和实现的基本原理. 自 ...

  3. iOS基本数据库存储方式 - CoreData

    CoreData 创建模型文件的过程 1.选择模板 2.添加实体 3.添加实体的属性[注意]属性的首字母必须小写 一.CoreData管理类(必备以下三个类对象) 1.CoreData数据操作的上下文 ...

  4. HMM基本原理及其实现(隐马尔科夫模型)

    HMM(隐马尔科夫模型)基本原理及其实现 HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程.马尔可夫链是时间和状态 ...

  5. 动态令牌-(OTP,HOTP,TOTP)-基本原理

    名词解释和基本介绍 OTP 是 One-Time Password的简写,表示一次性密码. HOTP 是HMAC-based One-Time Password的简写,表示基于HMAC算法加密的一次性 ...

  6. iOS CoreData 中 objectID 的不变性

    关于 CoreData的 objectID 官方文档有这样的表述:新建的Object还没保存到持久化存储上,那么它的objectID是临时id,而保存之后,就是持久化的id,不会再变化了. 那么,我想 ...

  7. ZooKeeper基本原理

    ZooKeeper简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. ZooKeeper设计目的 1. ...

  8. iOS CoreData primitive accessor

    Given an entity with an attribute firstName, Core Data automatically generates firstName, setFirstNa ...

  9. 初识CoreData与详解

    Core Data数据持久化是对SQLite的一个升级,它是iOS集成的,在说Core Data之前,我们先说说在CoreData中使用的几个类. (1)NSManagedObjectModel(被管 ...

随机推荐

  1. Xamarin.ios 调用接口

    NSString urlstring = new NSString("http://211.155.229.230:8585/api/users/postregister");  ...

  2. 2016福州大学软件工程第五、六次团队作业-Alpha阶段成绩汇总

    1.本次作业成绩统计结果: 本次Alpha阶段团队作业公布如下: 表格说明: PE:贡献百分比 YS:演示评分(满分15分) BK:博客评分(满分15分) SH:事后诸葛亮环节(满分5分) P:个人分 ...

  3. theano broadcasting

    当我们使用函数对两个数组进行计算时,函数会对这两个数组的对应元素进行计算,因此它要求这两个数组有相同的大小(shape相同).如果两个数组的shape不同的话,会进行如下的广播(broadcastin ...

  4. 解决ubuntu16.04软件中心闪退的问题

    依次执行下列命令 sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install --reinstall software-cen ...

  5. Web Map Gis 开发系列索引

    Google Map API Version3 :代码添加和删除marker标记 谷歌地图地理解析和反解析geocode.geocoder详解 Google map markers 百度与谷歌地图瓦片 ...

  6. js function集合

    /*跳转并是刷新界面*/ function page_back(){ history.go(-); location.reload(); } function show_div(obj){ if(ob ...

  7. [c#基础]关于const和readonly常见的笔试题剖析

    引言 有那么几天没更新博客了,发现到了不得不写的地步,总是有那么个声音在强迫自己,虽然工作很累,但是有些东西不写出来,不能原谅自己.今天为什么总结这两个关键字的区别,总觉得这两个关键字的用法用的太习惯 ...

  8. 又一枚精彩的弹幕效果jQuery实现

    精彩的弹幕效果分享给大家,具有一定的参考价值,感兴趣的朋友可以尝试制作弹幕,具体内容如下   简易弹幕效果:将发布的内容随机显示在弹幕右侧,逐渐左移最后消失.   涉及知识点:val().random ...

  9. Ruby安装Scss

    Ruby安装Scss 引言 已经许久不写HTML了,今天有点以前的东西要改.但是刚装的Windows10,已经没有以前的Web开发环境了.只好重新安装. 结果Webstorm装好后配置Scss出现错误 ...

  10. ubuntu 系统下搭建Java的环境

    1.首先可以使用 java -version来查看自己是否已经搭建了java的环境,如果出现了java的版本号则表示java的环境已经搭建好了!否则则继续下面的步骤进行java环境的搭建 2.进入Or ...