【案列】私人通讯录02 - 数据存储和删除

来源:互联网 发布:pcb画图软件 编辑:程序博客网 时间:2024/06/10 00:32

1.利用偏好设置,存储用户名,密码,记住密码,自动登录

登录操作中存储:

/** *  登录操作 */- (IBAction)loginBtnAction:(UIButton *)sender{    // 添加蒙版    [MBProgressHUD showMessage:@"正在登录..."];            // 模拟请求网络    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                // 隐藏蒙版        [MBProgressHUD hideHUD];                // 验证帐号密码        if ([self.accountField.text isEqualToString:@"name"] && [self.pwdField.text isEqualToString:@"123"]) {                        // 数据存储            // 帐号,密码,记住密码,自动登录            [[NSUserDefaults standardUserDefaults] setObject:_accountField.text forKey:@"account"];             [[NSUserDefaults standardUserDefaults] setObject:_pwdField.text forKey:@"pwd"];             [[NSUserDefaults standardUserDefaults] setBool:_rmbPwdSwitch.on forKey:@"rmb"];             [[NSUserDefaults standardUserDefaults] setBool:_autoLoginSwitch.on forKey:@"autoLogin"];                        // 跳转到联系人界面            [self performSegueWithIdentifier:@"login2contact" sender:nil];        }else{            // 帐号或者密码错误            [MBProgressHUD showError:@"帐号或者密码错误"];        }    });}
登录控制器加载的时候读取:
- (void)viewDidLoad {    [super viewDidLoad];        // 读取偏好设置数据    NSString *account = [[NSUserDefaults standardUserDefaults] objectForKey:@"account"];    NSString *pwd = [[NSUserDefaults standardUserDefaults] objectForKey:@"pwd"];    BOOL rmb = [[NSUserDefaults standardUserDefaults] boolForKey:@"rmb"];    BOOL autoLogin = [[NSUserDefaults standardUserDefaults] boolForKey:@"autoLogin"];        _accountField.text = account;    if (rmb == YES) {        _pwdField.text = pwd;    }    _rmbPwdSwitch.on = rmb;    _autoLoginSwitch.on = autoLogin;    if (autoLogin == YES) {        [self loginBtnAction:nil];    }        // 给文本框添加监听    [self.accountField addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];    [self.pwdField addTarget:self action:@selector(textChange) forControlEvents:UIControlEventEditingChanged];        // 判断登录按钮是否可以点击    [self textChange];}
2.归档存储联系人模型

模型需要遵守NSCoding协议:

////  Contact.h#import <Foundation/Foundation.h>@interface Contact : NSObject <NSCoding>@property(nonatomic,strong)NSString *name;@property(nonatomic,strong)NSString *phone;/** *  快速返回一个联系人模型对象 */+ (instancetype)contactWithName:(NSString *)name phone:(NSString *)phone;@end
并实现2个方法:
////  Contact.m#import "Contact.h"@implementation Contact+ (instancetype)contactWithName:(NSString *)name phone:(NSString *)phone{    Contact *c = [[self alloc] init];    c.name = name;    c.phone = phone;        return c;}// 遵守<NSCoding>协议必须实现下面2个方法/** *  归档 */- (void)encodeWithCoder:(NSCoder *)aCoder{    [aCoder encodeObject:_name forKey:@"name"];    [aCoder encodeObject:_phone forKey:@"phone"];}/** *  解档 */- (instancetype)initWithCoder:(NSCoder *)aDecoder{    if (self=[super init]) {        _name = [aDecoder decodeObjectForKey:@"name"];        _phone = [aDecoder decodeObjectForKey:@"phone"];    }    return self;}@end
然后添加联系人后要归档,编辑后也要归档,因为他们都在联系人控制器里实现了相应的代理协议或block,所以归档工作我们可以写在联系人控制器里:
#define cachesFilePath [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingString:@"contacts.data"]

- (NSMutableArray *)contacts{    if (_contacts == nil) {                // 读取本地数据        _contacts = [NSKeyedUnarchiver unarchiveObjectWithFile:cachesFilePath];                // 判断有木有数据        if (_contacts == nil) {            _contacts = [NSMutableArray array];        }    }        return _contacts;}

#pragma mark - AddViewControllerDelegate- (void)addViewController:(AddViewController *)addVC didClickAddBtnWithContact:(Contact *)contact{    // 把联系人模型保存到数组里面    [self.contacts addObject:contact];        // 刷新表格    [self.tableView reloadData];        // 保存联系人(归档)    [NSKeyedArchiver archiveRootObject:self.contacts toFile:cachesFilePath];}
/** *  点击cell的时候调用 */- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{    // 加载stroryborad(我们这里从storyboard创建控制器)    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil];        // 创建编辑控制器    // "edit"标识符 在Main.storyboard    EditViewController *edit = [sb instantiateViewControllerWithIdentifier:@"edit"];        edit.contact = self.contacts[indexPath.row];        // 设置block 要执行的    edit.block = ^(Contact *contact){        [self.contacts replaceObjectAtIndex:indexPath.row withObject:contact];                // 刷新表格        [self.tableView reloadData];                // 保存联系人(归档)        [NSKeyedArchiver archiveRootObject:self.contacts toFile:cachesFilePath];    };            // 跳转到编辑界面    [self.navigationController pushViewController:edit animated:YES];}

3.删除联系人
/** *  只要实现了这个方法,就会滑动删除功能 */- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{    // 删除模型    [self.contacts removeObjectAtIndex:indexPath.row];        // cell删除效果    [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];}

0 0
原创粉丝点击