CoreData 实例 --- 通讯录

要求:将数据存放于CoreData数据库中,包括联系人的姓名和电话号码,将数据取出,显示在view上

详细代码如下

首先导入#import<CoreData/CoreData.h>

ViewController.h 文件

static NSManagedObjectContext * _context; //上下文

@interface
TXLViewController ()

{

UITableView * _tableView;

NSMutableArray * _array;

TXLTableViewCell  * _cell;

}

@end

@implementation TXLViewController

- (void)viewDidLoad {

[superviewDidLoad];

[self_loadDatabase];  
//加载数据库

[self_loadView];   
//加载视图

}

#pragma mark - 加载数据库

- (void)_loadDatabase

{

//[self _createTable];  //建表,建表完成后注释掉

[self_query]; 
//查询所有联系人信息

for(Person * personin
_array)

{

NSLog(@"%@,%ld",[personvalueForKey:@"name"],[[personvalueForKey:@"telephoneNumber"]integerValue]);

}

}

- (void) _query

{

//3.
初始化模型

NSManagedObjectModel * model=[NSManagedObjectModelmergedModelFromBundles:nil];

//2.
创建基础库协调器

NSPersistentStoreCoordinator * psc=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:model];

//5.
获取沙盒路径

NSString * path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,
YES)firstObject];

path=[path stringByAppendingPathComponent:@"TXL.sqlite"];

NSLog(@"%@",path);

//6.
拼接URL

NSURL * url=[[NSURLalloc]initFileURLWithPath:path];

//4.为协调器添加基础库路径和基础库类型

[psc addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:url
options:nilerror:nil];

//1.创建上下文

_context=[[NSManagedObjectContextalloc]init];

_context.persistentStoreCoordinator=psc;

//初始化查询请求

NSFetchRequest * request=[[NSFetchRequestalloc]initWithEntityName:@"Person"];

//执行查询语句

_array = (NSMutableArray *)[_contextexecuteFetchRequest:request
error:nil];

//取数据

//从数据库中取到的数据是数组类型,数组中存放的是对象

}

#pragma mark - 创建表

- (void) _createTable

{

//3.
初始化模型

NSManagedObjectModel * model=[NSManagedObjectModelmergedModelFromBundles:nil];

//2.
创建基础库协调器

NSPersistentStoreCoordinator * psc=[[NSPersistentStoreCoordinatoralloc]initWithManagedObjectModel:model];

//5.
获取沙盒路径

NSString * path=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,
YES)firstObject];

path=[path stringByAppendingPathComponent:@"TXL.sqlite"];

NSLog(@"%@",path);

//6.
拼接URL

NSURL * url=[[NSURLalloc]initFileURLWithPath:path];

//4.为协调器添加基础库路径和基础库类型

[psc addPersistentStoreWithType:NSSQLiteStoreTypeconfiguration:nilURL:url
options:nilerror:nil];

//1.创建上下文

_context=[[NSManagedObjectContextalloc]init];

_context.persistentStoreCoordinator=psc;

//7.
插入数据

Person * person=[NSEntityDescriptioninsertNewObjectForEntityForName:@"Person"inManagedObjectContext:_context];

person.name=@"小王";

person.telephoneNumber=@(1008);

NSError * error;

[_contextsave:&error];

}

#pragma mark - 加载视图

- (void) _loadView

{

self.view.backgroundColor=[UIColorlightGrayColor];

_tableView= [[UITableViewalloc]initWithFrame:self.view.boundsstyle:UITableViewStylePlain];

_tableView.rowHeight=90;

self.navigationItem.title=@"通讯录列表";

//自定义视图,添加联系人按钮

UIButton * addPersonButton=[[UIButtonalloc]initWithFrame:CGRectMake(375-60,20,
30, 30)];

[addPersonButton setBackgroundImage:[UIImageimageNamed:@"add_person"]forState:UIControlStateNormal];

//给addPersonButton添加点击事件

[addPersonButton addTarget:selfaction:@selector(pushVC)forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem * addPersonItem=[[UIBarButtonItemalloc]initWithCustomView:addPersonButton];

//添加到当前的navigationItem

self.navigationItem.leftBarButtonItem=addPersonItem;

//自定义视图,查看添加关注的人员列表

UIButton * lookButton=[[UIButtonalloc]initWithFrame:CGRectMake(375-60,20,
30, 30)];

[lookButton setBackgroundImage:[UIImageimageNamed:@"star_big"]forState:UIControlStateNormal];

//给lookButton添加点击事件

[lookButton addTarget:selfaction:@selector(pushStarVC)forControlEvents:UIControlEventTouchUpInside];

UIBarButtonItem * lookStarItem=[[UIBarButtonItemalloc]initWithCustomView:lookButton];

self.navigationItem.rightBarButtonItem=lookStarItem;

_tableView.delegate=self;    //普通代理

_tableView.dataSource=self;  //数据源代理

[self.viewaddSubview:_tableView];

}

#pragma mark - pushVC跳转到添加联系人页面

- (void) pushVC

{

AddPersonViewController * addP=[[AddPersonViewControlleralloc]init];

[self.navigationControllerpushViewController:addP
animated:YES];

}

#pragma mark - pushStarVC跳转到查看关注列表页面

- (void) pushStarVC

{

LookStarViewController * lookS=[[LookStarViewControlleralloc]init];

[self.navigationControllerpushViewController:lookS
animated:YES];

}

#pragma mark - UITableViewDataSource代理需实现的方法

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

{

return
_array.count;

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath

{

//定义唯一标识

static
NSString * identy=@"myTableView";

//获取cell

_cell=[tableViewdequeueReusableCellWithIdentifier:identy];  
//判断缓冲池里是否有数据

if (_cell==nil) //缓冲池为空的话,创建cell

{

_cell=[[TXLTableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:identy];

}

[_cellsetData:_array[indexPath.row]];

return
_cell;

}

- (void)didReceiveMemoryWarning {

[superdidReceiveMemoryWarning];

}

@end

TableViewCell的设置:

@interface
TXLTableViewCell ()

{

UIImageView * _leftImage; 
//左边头像图片

UIView * _middleView;   
//中间(姓名+号码)

UIButton * _rightButton;
//右边关注图片

UILabel * _label;

UILabel * _numLabel;

}

@end

@implementation TXLTableViewCell

- (instancetype) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString
*)reuseIdentifier

{

self=[superinitWithStyle:style
reuseIdentifier:reuseIdentifier];

if (self)

{

//增加子视图

[self_addSubview];

}

return
self;

}

- (void) _addSubview

{

self.selectionStyle=UITableViewCellSelectionStyleNone;

//1.添加左边图片

_leftImage=[[UIImageViewalloc]initWithFrame:CGRectMake(0,5,
70,70)];

_leftImage.backgroundColor=[UIColorclearColor];

[selfaddSubview:_leftImage];

//2.添加中间号码

_middleView=[[UIViewalloc]initWithFrame:CGRectMake(90,5,
150,80)];

_middleView.backgroundColor=[UIColorwhiteColor];

//添加姓名label

_label=[[UILabelalloc]initWithFrame:CGRectMake(5,10,
60,
90-30)];

_label.backgroundColor=[UIColorwhiteColor];

[_middleView
addSubview:_label];

//添加号码label

_numLabel=[[UILabelalloc]initWithFrame:CGRectMake(10+60,10,
160,
60)];

_numLabel.backgroundColor=[UIColorwhiteColor];

[_middleView
addSubview:_numLabel];

[selfaddSubview:_middleView];

//3.添加右边关注图片

_rightButton=[[UIButtonalloc]initWithFrame:CGRectMake(375-60+5,25,
45,
45)];

_rightButton.backgroundColor=[UIColorwhiteColor];

[_rightButtonsetBackgroundImage:[UIImageimageNamed:@"no"]forState:UIControlStateNormal];

[selfaddSubview:_rightButton];

}

- (void)setData:(Person *) person{

_label.text=person.name;

_numLabel.text=[NSStringstringWithFormat:@"%li",[person.telephoneNumberintegerValue]];

_leftImage.image=[UIImageimageNamed:@"person"];

}

@end

Model:

Person.h文件

#import <Foundation/Foundation.h>

#import <CoreData/CoreData.h>

@interface Person :NSManagedObject

@property (nonatomic,retain)
NSString * name;

@property (nonatomic,retain)
NSNumber * telephoneNumber;

@end

Person.m文件

#import "Person.h"

@implementation Person

@dynamic name;

@dynamic telephoneNumber;

@end

其他的push页面可自行设置。

时间: 2024-12-23 11:08:30

CoreData 实例 --- 通讯录的相关文章

OC-字典&amp;数组运用实例:通讯录的实现

需求实现: 一.定义联系?类ContactPerson 实例变量:姓名.性别.电话号码.住址.分组名称. 方法:初始化?方法(姓名.电话号码).显?示联系?信息 二.定义AddressBook类, 封装以下功能, 类中定义一个实例变量可变数组,管理所有联系人, 通讯录具有以下功能: 1,  可以添加新联系?对象,如果姓名或电话号码为空,打印添加失败. 2.根据电话号码搜索联系? 3.获取所有某性联系? 4.根据姓名删除联系? 5.展?示通讯录中所有联系 6. 删除某分组的所有联系人 Contac

ObjectC----实现简单的通讯录(增删改查)

// Created By 郭仔 2015年04月09日21:27:50 经过两天的低迷,状态在慢慢的回归了,生活还要继续,人生还需奋斗! 祝:好人一生平安!!! ======================================================================== 题目描述: 1.创建AddressBook类. 1)使?用字典作为容器,字典的Key值为分组名(姓名?首字?母,?大写),value值为数组,数组 中存放联系?人(Person实例).(5分

iOS开发 - CoreData框架 数据持久化

Core Data Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象.在此数据操作期间,我们不需要编写任何SQL语句,这个有点类似于著名的Hibernate持久化框架,不过功能肯定是没有Hibernate强大的. 传统的数据库要把数据写到数据库,而且要写SQL语句 Core Data 就避免了写SQL语句的麻烦了 CoreData的使用步骤 1.创建模型

iOS企业级开发初级课程-表视图(13集)

首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜索栏.分组的使用.然后我们学习了如何对表视图单元格进行删除.插入.移动等操作.最后本章向大家介绍了表视图UI设计模式方面的内容. 序号 技术点 1 表视图-1-表视图介绍 2 表视图-2-简单表视图 3 表视图-3-简单表视图下 4 表视图-4-自定义单元格 5 表视图-5-搜索栏-1 6 表视图-

IOS 开发大牛首选之路

学习ios(必看经典)牛人40天精通iOS开发的学习方法 描述 这是一套从一个对iOS开发感兴趣的学员到iOS开发高手的系统.专业的课程体系.以培养企业开发真正需要的人才为目标,每个知识点都用案例来讲解.也适合想提升技能的已从事iOS开发的工作人员以最短时间内提升技能的从业者. 目标 通过本系列课程的学习,希望使一个对iOS开发感兴趣,想从事iOS开发的学员,成为一名真正iOS开发人员,iOS从业者,iOS技术大牛,最重要的是学会解决开发中遇到困难的方法. 建议 建议学员,尤其是初学者,一定要打

数据结构C++版-线性表

PS:资料来源慕课网视频. 一.什么是线性表 线性表是n个数据元素的有限序列. 分类: 二.补充知识点 1.栈和队列有出操作.入操作,对应线性表(数组)为插入元素和删除元素,而线性表中要获取指定元素值可直接使用getelem()函数,获取后并不删除元素,可重复获取. [与只能使用一次的栈.队列有区别] 2.顺序表:遍历和寻址非常快,插入.删除效率低. 3.<链表算法说明>课程评论:静态链表基于数组,动态链表基于结构体,所以线性表中的链表也有顺序存储结构 4.<链表编码实战一>课程笔

iOS开发 - 私人通讯录实例

私人通讯录实例 此实例主要练习UIViewController控制器的使用 创建模型类Model /** copy : NSString\NSMutableString\block weak : 代理\UI控件 strong : 其他OC对象 assign : 基本数据类型(int\float)\枚举\结构体 */ #import <Foundation/Foundation.h> @interface ZLContact : NSObject @property(nonatomic,copy

ios CoreData 用父类的实例对象person接收存有子类的数组,打印person.class ,结果是子类类名?还是父类类名(已解决)

新建Person类 person的子类 Student Teacher 今天做数据库封装时想到的,因为查询出的结果都继承自NSManagerObject,但是他的子类属性又不一定一样,所以我就想我在在查询之后能不能判断他是那个子类并且按照子类的属性进行赋值,所以首先我要数组存的对象的类进行判断 测试如下:(把主要代码贡献如下,其他文件自己建议下吧,很简单) NSMutableArray * array = [NSMutableArray array]; NSMutableArray * arra

单向链表实例:终端交互简易通讯录

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 5 6 typedef struct Contacts_infomation{ 7 char name[13]; 8 char work_unit[61]; 9 char phone_number[12]; 10 char E_mail[61]; 11 struct Contacts_infomation *next; 12 }con_i