IOS开发之——私人通讯录-数据存储(6)

一 概述

本文介绍私人通讯录数据存储相关的知识点:

  • 登陆界面中:记住用户名和密码及自动登陆
  • 添加联系人数据保存及更新结果保存

二 效果图

三 功能实现

3.1 登陆界面

保存登陆数据

1
2
3
4
5
6
7
//保存登陆数据
[UserDefaults setObject:_accountField.text forKey:AccountKey];
[UserDefaults setObject:_pwdField.text forKey:PwdKey];
[UserDefaults setBool:_rmbPwdS.isOn forKey:RmbPwdKey];
[UserDefaults setBool:_autoLoginS.isOn forKey:AutoLoginKey];
//同步:当前内存中的数据和沙盒同步
[UserDefaults synchronize];

从沙盒读取数据

1
2
3
4
5
6
7
8
//从沙盒里读取数据
_accountField.text=[UserDefaults objectForKey:AccountKey];
if (_rmbPwdS.on) {
_pwdField.text=[UserDefaults objectForKey:PwdKey];
}
_rmbPwdS.on=[UserDefaults boolForKey:RmbPwdKey];
_autoLoginS.on=[UserDefaults boolForKey:AutoLoginKey];
if (_autoLoginS.on) {[self loginBtn:self.loginBtn];}

3.2 添加联系人和更新联系人

保存数据

1
2
#define FilePath [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]stringByAppendingPathComponent:@"contact.data"]
[NSKeyedArchiver archiveRootObject:self.contacts toFile:FilePath];

要保存的类实现NSCoding

1
2
3
4
5
6
7
8
9
10
11
12
13
14
- (instancetype)initWithCoder:(NSCoder *)coder
{
if (self=[super init])
{
_name=[coder decodeObjectForKey:NameKey];
_phone=[coder decodeObjectForKey:PhoneKey];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)coder
{
[coder encodeObject:_name forKey:NameKey];
[coder encodeObject:_phone forKey:PhoneKey];
}

读取联系人数据

1
2
3
4
5
6
7
8
9
10
- (NSMutableArray *)contacts
{
if (_contacts==nil) {
_contacts=[NSKeyedUnarchiver unarchiveObjectWithFile:FilePath];
if (_contacts==nil) {
_contacts=[NSMutableArray array];
}
}
return _contacts;
}

更新联系人数据

1
2
3
4
5
6
7
8
//协议方法,成功更新了一个联系人
-(void)editViewController:(EditViewController *)edit didUpdateContact:(Contact *)contact
{
//刷新表格
[self.tableView reloadData];
//归档
[NSKeyedArchiver archiveRootObject:self.contacts toFile:FilePath];
}