码迷,mamicode.com
首页 > 移动开发 > 详细

2016-1-7第一个完整APP 私人通讯录的实现 5:保存数据

时间:2016-01-07 13:38:21      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

一:登陆界面

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!