1. 源码下载地址:07-联系人数据存储.zip
    35.8 KB
  2. // MJPerson.h

  3. //
  4. //  MJPerson.h
  5. //  07-联系人数据存储
  6. //
  7. //  Created by apple on 13-12-11.
  8. //  Copyright (c) 2013年itcast. All rights reserved.
  9. ////本文永久链接,转载请注明出处:http://www.cnblogs.com/ChenYilong/p/3490609.html
  10. #import<Foundation/Foundation.h>
  11. @interface MJPerson : NSObject <NSCoding>
  12. @property (nonatomic,copy) NSString *name;
  13. @property (nonatomic,copy) NSString *phone;
  14. @end
  15. // MJPerson.m

    Map

  16. //
  17. //  MJPerson.m
  18. //  07-联系人数据存储
  19. //
  20. //  Created by apple on 13-12-11.
  21. //  Copyright (c) 2013年itcast. All rights reserved.
  22. //
  23. #import"MJPerson.h"
  24. @implementation MJPerson
  25. - (void)encodeWithCoder:(NSCoder *)encoder
  26. {
  27.     [encoder encodeObject:_name forKey:@"name"];
  28.     [encoder encodeObject:_phone forKey:@"phone"];
  29. }
  30. - (id)initWithCoder:(NSCoder *)decoder
  31. {
  32.    if(self= [super init]) {
  33.         _name = [decoder decodeObjectForKey:@"name"];
  34.         _phone = [decoder decodeObjectForKey:@"phone"];
  35.     }
  36.    return self;
  37. }
  38. @end
  39. // MJFriendsViewController.h

    Map

  40. //
  41. //  MJFriendsViewController.h
  42. //  07-联系人数据存储
  43. //
  44. //  Created by apple on 13-12-11.
  45. //  Copyright (c) 2013年itcast. All rights reserved.
  46. //
  47. #import<UIKit/UIKit.h>
  48. @interface MJFriendsViewController : UITableViewController
  49. @end
  50. // MJFriendsViewController.m

    Map

  51. //
  52. //  MJFriendsViewController.m
  53. //  07-联系人数据存储
  54. //
  55. //  Created by apple on 13-12-11.
  56. //  Copyright (c) 2013年itcast. All rights reserved.
  57. ////本文永久链接,转载请注明出处:http://www.cnblogs.com/ChenYilong/p/3490609.html
  58. #define kFilePath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0] stringByAppendingPathComponent:@"persons.data"]
  59. #import "MJFriendsViewController.h"
  60. #import "MJAddViewController.h"
  61. #import "MJPerson.h"
  62. @interface MJFriendsViewController () <MJAddViewControllerDelegate>
  63. {
  64.     NSMutableArray *_persons;
  65. }
  66. @end
  67. @implementation MJFriendsViewController
  68. - (void)viewDidLoad
  69. {
  70.     [super viewDidLoad];
  71.    
  72. //    NSString *doc = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
  73.    
  74. //    NSString *path = [doc stringByAppendingPathComponent:@"persons.data"];
  75.    
  76. //    _persons = [PersonTool persons];
  77.    
  78.     _persons = [NSKeyedUnarchiver unarchiveObjectWithFile:kFilePath];
  79.    
  80.    if(_persons ==nil) {
  81.         _persons = [NSMutableArray array];
  82.     }
  83. }
  84. - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
  85. {
  86.    // 1.导航控制器
  87.     UINavigationController *nav = segue.destinationViewController;
  88.    
  89.    // 2.取出栈顶的添加控制器
  90.     MJAddViewController *add = (MJAddViewController *)nav.topViewController;
  91.    
  92.    // 3.设置代理
  93.     add.delegate =self;
  94. }
  95. #pragma mark - MJAddViewController的代理方法
  96. #pragma mark成功添加一个联系人就会调用
  97. - (void)addViewController:(MJAddViewController *)add didAddPerson:(MJPerson *)person
  98. {
  99.    // 1.将人塞进数组中
  100.     [_persons insertObject:person atIndex:0];
  101.    
  102.    // 2.刷新表格
  103.     [self.tableView reloadData];
  104.    
  105.    // 3.归档
  106. //    NSString *doc = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
  107. ////本文永久链接,转载请注明出处:http://www.cnblogs.com/ChenYilong/p/3490609.html   
  108. //    NSString *path = [doc stringByAppendingPathComponent:@"persons.data"];
  109.    
  110.     [NSKeyedArchiver archiveRootObject:_persons toFile:kFilePath];
  111.    
  112. //    [PersonTool savePersons:_persons];
  113. }
  114. #pragma mark - Table view data source
  115. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
  116. {
  117.    return _persons.count;
  118. }
  119. #pragma mark每一行显示怎样的cell(内容)
  120. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  121. {
  122.    // 1.定义一个标识
  123.    static NSString *ID =@"cell";
  124.    
  125.    // 2.去缓存池中取出可循环利用的cell
  126.     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
  127.    
  128.    // 3.如果缓存中没有可循环利用的cell
  129.    if(cell ==nil) {
  130.         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
  131.     }
  132.    
  133.    // 4.取出模型设置数据
  134.     MJPerson *p = _persons[indexPath.row];
  135.    
  136.     cell.textLabel.text = p.name;
  137.     cell.detailTextLabel.text = p.phone;
  138.    
  139.    return cell;
  140. }
  141. @end
  142. // MJAddViewController.h

    Map

  143. //
  144. //  MJAddViewController.h
  145. //  07-联系人数据存储
  146. //
  147. //  Created by apple on 13-12-11.
  148. //  Copyright (c) 2013年itcast. All rights reserved.
  149. //
  150. #import<UIKit/UIKit.h>
  151. @classMJAddViewController, MJPerson;
  152. @protocolMJAddViewControllerDelegate <NSObject>
  153. @optional
  154. - (void)addViewController:(MJAddViewController *)add didAddPerson:(MJPerson *)person;
  155. @end
  156. @interface MJAddViewController : UIViewController
  157. - (IBAction)cancel:(id)sender;
  158. - (IBAction)add:(id)sender;
  159. @property(weak,nonatomic)IBOutletUITextField *nameField;
  160. @property(weak,nonatomic)IBOutletUITextField *phoneField;
  161. @property(nonatomic,weak)id<MJAddViewControllerDelegate> delegate;
  162. @end
  163. // MJAddViewController.m

    Map

  164. //
  165. //  MJAddViewController.m
  166. //  07-联系人数据存储
  167. //
  168. //  Created by apple on 13-12-11.
  169. //  Copyright (c) 2013年itcast. All rights reserved.
  170. //
  171. #import"MJAddViewController.h"
  172. #import"MJPerson.h"
  173. @interfaceMJAddViewController ()
  174. @end
  175. @implementationMJAddViewController
  176. - (void)viewDidLoad
  177. {
  178.     [superviewDidLoad];
  179. // Do any additional setup after loading the view.
  180. }
  181. - (IBAction)cancel:(id)sender {
  182.     [self dismissViewController Animated:YES completion:nil];
  183. }
  184. - (IBAction)add:(id)sender {
  185.    if([_delegate respondsToSelector:@selector(addViewController:didAddPerson:)]) {
  186.         MJPerson *p = [[MJPerson alloc] init];
  187.         p.name = _nameField.text;
  188.         p.phone = _phoneField.text;
  189.        
  190.         [_delegate addViewController:self didAddPerson:p];
  191.        
  192.         [self dismissViewControllerAnimated:YEScompletion:nil];
  193.     }
  194. }
  195. @end

联系人数据存储Demo源代码的更多相关文章

  1. 七牛云数据存储Demo

    利用七牛云的Python SDK实现文件上传.下载等操作. import os import requests import qiniu from qiniu import BucketManager ...

  2. 1211笔记关于//modal//更改窗口的根控制器//数据存取//Plist属性列表//-“沙盒机制”//plis属性列表//偏好设置//归档普通对象//联系人数据存储//协议与回调函数

    一.利用Modal形式展示控制器 1.如何展示// vc就是要展示的新控制器[self presentViewController:vc animated:YES completion:^{    N ...

  3. Web自动化框架之五一套完整demo的点点滴滴(excel功能案例参数化+业务功能分层设计+mysql数据存储封装+截图+日志+测试报告+对接缺陷管理系统+自动编译部署环境+自动验证false、error案例)

    标题很大,想说的很多,不知道从那开始~~直接步入正题吧 个人也是由于公司的人员的现状和项目的特殊情况,今年年中后开始折腾web自动化这块:整这个原因很简单,就是想能让自己偷点懒.也让减轻一点同事的苦力 ...

  4. 看懂Qt源代码-Qt源码的对象数据存储

    第一次看Qt源代码的人都会被其代码所迷惑,经常会看到代码中的d_ptr成员.d_func(函数)和Q_DECLARE_PRIVATE等奇怪的宏,总是让人一头雾水,下面这篇文章转自http://www. ...

  5. android 数据存储Ⅱ

    本章继续讲解在Android开发中,数据的存储与管理.涉及知识点:SQLite,SwipeRefreshLayout控件刷新. 1.功能需求 练习使用SQLite 做一个登录界面,数据库字段包含用户名 ...

  6. Android中数据存储(一)

    国庆没有给国家添堵,没有勾搭妹子,乖乖的写着自己的博客..... 本文将为大家介绍Android中数据存储的五种方式,数据存储可是非常重要的知识哦. 一,文件存储数据 ①在ROM存储数据 关于在ROM ...

  7. ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调

    近期项目中可能要用到Flash存取数据,并与JS互调,所以就看了一下ActionScript 3.0,现把学习结果分享一下,希望对新手有帮助. 目录 ActionScript 3.0简介 Hello ...

  8. Android系统的五种数据存储形式(二)

    之前介绍了Android系统下三种数据存储形式,今天补充介绍另外两种,分别是内容提供者和网络存储.有些人可能认为内存提供者和网络存储更偏向于对数据的操作而不是数据的存储,但这两种方式确实与数据有关,所 ...

  9. Android 数据存储五种方式

    1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存储空间等,分别是: ① 使用Shared ...

随机推荐

  1. python基础——元组、文件及其它

    Python核心数据类型--元组 元组对象(tuple)是序列,它具有不可改变性,和字符串类似.从语法上讲,它们便在圆括号中,它们支持任意类型.任意嵌套及常见的序列操作. 任意对象的有序集合:与字符串 ...

  2. 管理员常用Windows PowerShell命令Top25

    即使Windows PowerShell已经由来已久,但很多管理员并不愿意主动熟悉PowerShell cmdlet命令行.随着微软扩展了PowerShell的功能,管理员应该对其功能及使用烂熟于心. ...

  3. 获得通讯录并拨打电话 Android

    由于通讯录在手机里是以数据库贮存的 所以我们可以通过getContentResolver来获得通讯录 ,这个方法返回一个游标的数据类型,通过moveToNext()方法来获取所有的手机号码信息, 当然 ...

  4. Linux-Ps命令使用

    ps -ef | grep java ps aux | grep java ps aux 是用BSD的格式来显示Java进程 显示的项目有: USER        PID %CPU %MEM    ...

  5. Google无法离线安装扩展程序

    Google无法离线安装扩展程序 Chrome插件伴侣 按照里面的使用说明使用 网盘地址: 链接: https://pan.baidu.com/s/1eXoLXyPNl2pfoPnArHq2Lg 提取 ...

  6. HDU 4467 Graph(图论+暴力)(2012 Asia Chengdu Regional Contest)

    Description P. T. Tigris is a student currently studying graph theory. One day, when he was studying ...

  7. PAT java大数 A+B和C

    题目描述: 给定区间[-, ]内的3个整数A.B和C,请判断A+B是否大于C. 输入格式: 输入第1行给出正整数T(<=),是测试用例的个数.随后给出T组测试用例,每组占一行,顺序给出A.B和C ...

  8. lintcode-110-最小路径和

    110-最小路径和 给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径. 注意事项 你在同一时间只能向下或者向右移动一步 样例 标签 动态规划 思路 使用动态规划,用二 ...

  9. Hash表 算法的详细解析

    http://xingyunbaijunwei.blog.163.com/blog/static/76538067201111494524190/ 什么是HashHash,一般翻译做“散列”,也有直接 ...

  10. 项目常用解决方案之SystemSetting.xml文件的修改与读取

    Winform及WPF项目中经常会用到类似SystemSetting.xml等类似的文件用于保存CLIENT的数据,比如登录过的用户名或密码以及其他设置.所以就想到一个解决方法,可以用到所有有此需求的 ...