iOS开发-私人通讯录-数据存储和编辑模式

UI界面

-(void)viewDidLoad
{
[super viewDidLoad];
//addTarget:一般用于监听按钮的点击 以及进度条值的改变

//通过通知监听UITextField的改变
/*
addObserver:谁来监听
selector:通知发生的时候调用什么方法
name:通知名称
object:谁发送的通知
注意:object不能写nil,因为如果是nil只要是UITextField发生改变都会调用textChange方法,而我们只在账号和密码输入框发生改变的时候才调用
*/
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.nameField];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChange) name:UITextFieldTextDidChangeNotification object:self.pwdField];

//读取偏好设置信息
NSUuserDefualts *defualts = [NSUuserDefualts standardUserDefualts];
//读取账号信息
self.nameField.text = [defualts obejctForKey:kAccount];
是否需要保存密码
self.remPwd.on =[defualts boolForKey:kRemPwd];
if(self.remPwd.on){ //需要记住密码
self.PwdField.text = [defualts objectForKey:kPassword];
}
是否需要自动登陆
self.autoLogin.on =[defualts boolForKey:kAutoLogin];
if(self.autoLogin.on){ //需要自动登陆
//手动点击登陆按钮
[self logBtnClick];
  }
}
// 移除监听
-(void)dealloc
{...}

/**
* 输入框发生改变的时候调用
*/
-(void)textChange
{...}

#pragma mark - 按钮点击事件
/**
* 点击记住密码
*/
-(IBAction)remPwdSwitch
{
//判断记住密码开关的状态
if(self.remPwd.on == NO){
//取消了记住密码,对应取消自动登陆
//self.autoLogin.on = NO;
[self.autoLogin setOn:NO animated:YES];
}
}

/**
* 点击自动登陆
*/

-(IBAction)autoLoginSwitch
{...}

/**
* 点击登陆按钮
* iOS开发常用框架
* coco4app
*/

-(IBAction)logBtnClick
{
//判断用户名和密码是否正确
if(self.nameField.text isEqualToString:@"lnj")&&
[self.pwdField.text isEqualToString:@"123"]){
//显示蒙版(挡住不让用户继续操作,以及提示用户)
[MBProgressHUD showMessage:@"正在拼命登陆ing....."];

//模拟网络登陆 2秒之后再跳转
dispatch_after(dispatch_time(DISPATCH_TIME_NOW,(int64_t)(0.5 * NSEC_PER_SEC)),dispatch_get_main_queue(),^{
//移除提示框
[MBProgressHUD hideHUD];

//保存偏好设置信息
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
//1.账号
[defaults setObject:self.nameField.text forKey:kAccount];
//2.密码
[defaults setObject:self.pwdField.text forKey:kPassword];
//3.是否自动登陆
[defaults setBool:self.autoLogin.on forKey:kAutoLogin];
//4.是否记住密码
[defaults setBool:self.remPwd.on forKey:@"kRemPwd"];
//立刻同步(立刻保存数据)
[defaults synchronize];

//跳转到联系人列表
[self
performSegueWithIdentifier:@"login2contacts"sender:@"lnj"];
});
   }else
     {
[MBProgressHUD showError:@"用户名或者密码错误"];
     }
}

在NJContactsViewController.m中
-(void)logout
{...}
#pragma mark - UIActionSheetDelegate
//UIActionSheet上面的按钮被点击的时候调用
//buttonIndex被点击按钮的索引
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{...}
//segue跳转之前调用
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{...}

#pragma mark - NJEditViewControllerDelegate
-(void)editViewController:(NJEditViewController *)editViewController didContact:(NJContact *)contact
{
//1.刷新表格
[self.tableView reloadData];

//2.持久化数据
[NSKeyedArchiver archiveRootObject:self.contacts toFile:kFilePath];
}

#pragma mark -NJAddViewControllerDelegate
-(void)addViewController:(NJAddViewController *)addViewController didContact:(NJContact *)contact
{
//1.保存数据
[self.contacts addObject:contact];
//2.刷新表格
[self.tableView reloadData];
//3.持久化模型数据(先要遵守NSCoding协议并实现协议方法)
[NSKeyedArchiver archiveRootObject:self.contacts toFile:kFilePath];
}
PS:将 [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)
lastObject ] stringByAppendingPathComponent:@"contacts.arc"];
定义成宏 kFilePath

编辑模式(在NJContactsViewController.m中)
//只要实现该方法,手指在cell上面滑动的时候就自动实行删除按钮
//commitEditingStyle:传入提交的编辑操作(删除/添加)
//forRowAtIndexPath:当前正在编辑的行
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:
(NSIndexPath *)indexPath
{
//1.修改数据
[self.contacts removeObjectAtIndex:indexPath.row];
//2.刷新表格
//reloadData会重新调用数据源的所有方法。刷新所有行
//该方法用于删除tableView上指定行的cell
//注意:使用该方法的时候,模型中删除的数据条数必须和deleteRowsAtIndexPaths方法中删除的条数一致,否则会报错
//简而言之,就修改的数据必须和删除的cell保持一致
[self.tableView deleteRowsAtIndexPaths:@[indexPath]withRowAnimation:随便选]
//3.更新保存的文件
[NSKeyedArchiver archiveRootObject:self.contacts toFile:kContactsPath];
}

#pragma mark - 懒加载
-(NSMutableArray *)contacts
{
if(_contacts == nil){
//从归档文件中读取数据
_contacts = [NSKeyedUnarchiver unarchiveObjectWithFile:kFilePath];
if(_contacts == nil){ //没有归档文件的情况
_contacts = [NSMutableArray array];
     }
  }
    return _contacts;
}

时间: 2024-11-05 00:54:30

iOS开发-私人通讯录-数据存储和编辑模式的相关文章

学习IOS开发UI篇--数据存储

iOS应用数据存储的常用方式 1.lXML属性列表(plist)归档 2.lPreference(偏好设置) 3.lNSKeyedArchiver归档(NSCoding) 4.lSQLite3 5.lCore Data Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录.例如,游戏应用可将游戏存档保存在该目录 tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除.应用没有运行时,系统也可能会清除该目录下的文件.iTunes同步设备时

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开发:本地数据存储-NSUserDefaults

Getting Default Values arrayForKey(_:) boolForKey(_:) dataForKey(_:) dictionaryForKey(_:) floatForKey(_:) integerForKey(_:) objectForKey(_:) stringArrayForKey(_:) stringForKey(_:) doubleForKey(_:) URLForKey(_:) Setting Default Values setBool(_:forKey

iOS开发之--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook功能开发汇总

前言 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 目录 系统应用 系统服务 2.1. 短信与邮件 2.2. 通讯录 2.3. 蓝牙 2.4. 社交 2.5. Game Center 2.6. 应用内购买 2.7. iCloud 2.8. Passbook 1. 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.短信.邮件.浏览

iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

--系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 调用系统应用 使用系统服务 短信与邮件 通讯录 蓝牙 社交 Game Center 应用内购买 iCloud Passbook 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.短信.邮件.浏览器应用,此时你可以直接使用UIApplication的OpenUR

iOS开发系列通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开

--系统应用与系统服务 iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务:http://www.jinhusns.com/Products/Download/?type=xcj 调用系统应用 使用系统服务 短信与邮件 通讯录 蓝牙 社交 Game Center 应用内购买 iCloud Passbook 目 录 系统应用 在开发某些应用时可能希望能

iOS开发长文--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总

链接:http://www.cocoachina.com/ios/20150129/11068.html iOS开发过程中有时候难免会使用iOS内置的一些应用软件和服务,例如QQ通讯录.微信电话本会使用iOS的通讯录,一些第三方软件会在应用内发送短信等.今天将和大家一起学习如何使用系统应用.使用系统服务: 调用系统应用 使用系统服务 短信与邮件 通讯录 蓝牙 社交 Game Center 应用内购买 iCloud Passbook 系统应用 在开发某些应用时可能希望能够调用iOS系统内置的电话.

iOS开发项目篇—20存储账号信息

iOS开发项目篇—20存储账号信息 一.简单说明 1.不论请求是否成功,都在发送Post请求后,隐藏遮罩. 2.在授权成功后,切换根控制器. (1)说明 切换到控制器有几种情况,要么是切换到新特性,要么是切换到“首页”. 没有必要每次进入程序都需要登录,且每次返回的数据都是一样的,所以只需要把拿到的信息保存到沙盒里就可以了. 判断上次有没有登录成功(把拿到的access_token保存到沙盒中,如果沙盒中有access_token,说明上次登录成功),如果上次登陆成功,那么就判断是否要进入新特性

IOS开发UI基础--数据刷新

IOS开发UI基础--数据刷新 cell的数据刷新包含以下几个方面 添加数据 删除数据 更改数据 全局刷新方法(最常用) [self.tableView reloadData]; // 屏幕上的所有可视的cell都会刷新一遍 局部刷新方法 添加数据 NSArray *indexPaths = @[ [NSIndexPath indexPathForRow:0 inSection:0], [NSIndexPath indexPathForRow:1 inSection:0] ]; [self.ta