标签:
一:登陆界面
1):用户点击登陆按钮并成功登陆后,根据此时的开关情况选择是否保存数据,代码如下:
if ([acount isEqualToString:@"zhangsan"]&&[password isEqualToString:@"123"]) { [self performSegueWithIdentifier:@"ContactsViewController" sender:nil]; [MBProgressHUD showSuccess:@"登陆成功"]; // 在用户登录成功后,读取此时的开关信息,并根据情况将用户的账号或者密码存放在沙盒里 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:self.acountField.text forKey:accountKey]; if (self.remerberSwitch.on) { [defaults setObject:self.passwordField.text forKey:passwordKey]; } [defaults synchronize]; }else{ [MBProgressHUD showError:@"账号密码错误"]; }
2):在viewDidLoad方法中判断此时开关情况,选择是否自动填充密码或者自动登陆,代码如下:
- (void)viewDidLoad { [super viewDidLoad]; self.loginBtn.enabled = NO; // 从沙盒中读取用户关于开关的偏好设置 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; self.loginSwitch.on = [defaults boolForKey:autoLoginSwitchForKey]; self.remerberSwitch.on = [defaults boolForKey:rememberPwdSwitchForKey]; // 根据已经读取到得开关的情况 从沙盒里读取用户账户或者密码 self.acountField.text = [defaults objectForKey:accountKey]; if (self.remerberSwitch.on) { self.passwordField.text = [defaults objectForKey:passwordKey]; } [self textChange]; // 判断自动登陆的开关是否打开,并自动登陆 // if (self.loginSwitch.on) { // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // [self loginBtnClicked]; // }); // }
3):
- (IBAction)rememberSwitchChange { // 如果此时自动登陆开启,而记住密码为关闭,应该关闭自动登录 if (self.loginSwitch.isOn == YES && self.remerberSwitch.isOn == NO) { [self.loginSwitch setOn:NO animated:YES]; } // 保存开关数据到沙盒里去 NSUserDefaults *defautls = [NSUserDefaults standardUserDefaults]; [defautls setBool:self.remerberSwitch.on forKey:rememberPwdSwitchForKey]; [defautls setBool:self.loginSwitch.on forKey:autoLoginSwitchForKey]; [defautls synchronize]; } - (IBAction)autoLoginSwitchChange { //如果此时自动登陆开启,而记住密码为关闭,则应该打开记住密码 if (self.remerberSwitch.isOn == NO && self.loginSwitch.isOn == YES) { [self.remerberSwitch setOn:YES animated:YES]; } NSUserDefaults *defautls = [NSUserDefaults standardUserDefaults]; [defautls setBool:self.remerberSwitch.on forKey:rememberPwdSwitchForKey]; [defautls setBool:self.loginSwitch.on forKey:autoLoginSwitchForKey]; [defautls synchronize]; }
二:contactsViewController中
1);
//定义一个文件路径 @property (copy, nonatomic) NSString *contactPath;
同时设置文件路径属性懒加载和数据模型数组懒加载
// 懒加载联系人的文件路径 - (NSString *)contactPath { if (!_contactPath) { NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; _contactPath = [doc stringByAppendingPathComponent:@"contacts.acrhiver"]; } return _contactPath; } - (NSMutableArray *)contacts { if (!_contacts) { // 先从沙盒中获取数据 _contacts = [NSKeyedUnarchiver unarchiveObjectWithFile:self.contactPath]; // NSLog(@"%d",self.contacts.count); // 0x7fe0085f94a0 // 0x7ff800fb3c40 if (!_contacts) { NSMutableArray *contacts = [NSMutableArray array]; _contacts = contacts; } } return _contacts; }
2):在addcontactViewcontroller与edicontactViewController的代理方法中同时添加如下代码:
// 同步数据到沙盒里去 [NSKeyedArchiver archiveRootObject:self.contacts toFile:self.contactPath];
三:实际效果:
2016-1-7第一个完整APP 私人通讯录的实现 5:保存数据
标签:
原文地址:http://www.cnblogs.com/BJTUzhengli/p/5109354.html