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

一 概述

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

  • 登陆界面中:记住用户名和密码及自动登陆

  • 添加联系人数据保存及更新结果保存

<!--more-->

二 效果图

三 功能实现

3.1 登陆界面

保存登陆数据

//保存登陆数据
[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];

从沙盒读取数据

//从沙盒里读取数据
 _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 添加联系人和更新联系人

保存数据

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

要保存的类实现NSCoding

- (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];
}

读取联系人数据

- (NSMutableArray *)contacts
{
    if (_contacts==nil) {
        _contacts=[NSKeyedUnarchiver unarchiveObjectWithFile:FilePath];
        if (_contacts==nil) {
            _contacts=[NSMutableArray array];
        }
       
    }
    return _contacts;
}

更新联系人数据

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

猜你喜欢

转载自blog.csdn.net/Calvin_zhou/article/details/108957388