CoreData __ 基本原理
操作过程
- 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 __ 基本原理的更多相关文章
- Ognl表达式基本原理和使用方法
Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...
- Android自定义控件之基本原理
前言: 在日常的Android开发中会经常和控件打交道,有时Android提供的控件未必能满足业务的需求,这个时候就需要我们实现自定义一些控件,今天先大致了解一下自定义控件的要求和实现的基本原理. 自 ...
- iOS基本数据库存储方式 - CoreData
CoreData 创建模型文件的过程 1.选择模板 2.添加实体 3.添加实体的属性[注意]属性的首字母必须小写 一.CoreData管理类(必备以下三个类对象) 1.CoreData数据操作的上下文 ...
- HMM基本原理及其实现(隐马尔科夫模型)
HMM(隐马尔科夫模型)基本原理及其实现 HMM基本原理 Markov链:如果一个过程的“将来”仅依赖“现在”而不依赖“过去”,则此过程具有马尔可夫性,或称此过程为马尔可夫过程.马尔可夫链是时间和状态 ...
- 动态令牌-(OTP,HOTP,TOTP)-基本原理
名词解释和基本介绍 OTP 是 One-Time Password的简写,表示一次性密码. HOTP 是HMAC-based One-Time Password的简写,表示基于HMAC算法加密的一次性 ...
- iOS CoreData 中 objectID 的不变性
关于 CoreData的 objectID 官方文档有这样的表述:新建的Object还没保存到持久化存储上,那么它的objectID是临时id,而保存之后,就是持久化的id,不会再变化了. 那么,我想 ...
- ZooKeeper基本原理
ZooKeeper简介 ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. ZooKeeper设计目的 1. ...
- iOS CoreData primitive accessor
Given an entity with an attribute firstName, Core Data automatically generates firstName, setFirstNa ...
- 初识CoreData与详解
Core Data数据持久化是对SQLite的一个升级,它是iOS集成的,在说Core Data之前,我们先说说在CoreData中使用的几个类. (1)NSManagedObjectModel(被管 ...
随机推荐
- mysql主从复制操作步骤
注: .做主从复制的两台服务器server-id不能相同 .主从的字符集要一样,不然数据导入会报错 .开启db01的log-bin功能 [root@db01 mysql]# vim /etc/my.c ...
- ios 快速审核
https://developer.apple.com/contact/app-store/?topic=expedite
- Anaconda 安装 ml_metrics package
ml_metrics is the Python implementation of Metrics implementations a library of various supervised m ...
- JAVA连接SqlServer2008R2和MySql数据库
问题描述: 下面是有关连接SqlServer2008R2和MySql数据库的封装类 package com.test; import java.sql.Connection; import java. ...
- 10Spring高级----青软S2SH(笔记)
- js像素运算问题
通过DOM获取的某一距离属性(比如left)是带px单位的,直接对其算术运算不起效,要先把获取到的值处理一下去掉px单位. 方法一(用处理字符串的方式去除px): var x=document.get ...
- KMP模板
参考:http://www.cnblogs.com/c-cloud/p/3224788.html #include<stdio.h> #include<string.h> vo ...
- spring mvc controller间跳转 重定向 传参
http://blog.csdn.net/jackpk/article/details/19121777/
- Linux SVN 命令详解
1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain ...
- word20161224
V.34 V.90 validation / 验证 value entry / 值项 variable / 变量 variable bit rate, VBR / 可变传输率 VBR, variabl ...