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

一:登陆界面

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

三:实际效果:

时间: 2025-01-14 04:20:38

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

2016-1-5第一个完整APP 私人通讯录的实现 4:编辑联系人

一:建立编辑联系人的controller,并使其拥有模型contact,且有协议.代码如下 #import <UIKit/UIKit.h> #import "contact.h" @class EditContactViewController ; @protocol EditContactViewControllerDelegate<NSObject> - (void) editContactViewController:(EditContactViewCon

2016-1-5第一个完整APP 私人通讯录的实现 3:添加联系人

一:创建模型对象:contact用于存放数据,也便于读取加载 #import <Foundation/Foundation.h> @interface contact : NSObject @property (strong, nonatomic) NSString *name; @property (strong, nonatomic) NSString *tel; @end 二:在addContackViewController中设置代理协议,并监听输入栏 #import <UIKi

2016-1-5第一个完整APP 私人通讯录的实现 2:增加提示用户的提示框,监听文本框

一:在登录时弹出提示用户的提示框: 1.使用第三方框架. 2.在登陆按钮点击事件中增加如下代码: - (IBAction)loginBtnClicked { NSString *acount = self.acountField.text; NSString *password = self.passwordField.text; // 跳出正在登陆的提示框 [MBProgressHUD showMessage:@"正在登陆"]; // 模拟加载中 QAQ 感觉好喜感啊 dispatc

iOS完整App资源收集

前言 iOS开发学习者都希望得到实战训练,但是很多资料都是只有一小部分代码,并不能形成完成的App,笔者在此处收集了很多开源的完整的App,都有源代码哦! 本篇文章持续更新中,请持续关注.本篇所收集的内容来源于四面八方,若大家看到好的资源,欢迎在评论中提出,笔者会整理至文章中,谢谢! 完整项目 Phonetic Swift 写的一个 iOS 版的 Phonetic Contacts,功能很多,其中昵称功能非常实用,已在 GitHub 开源并上架 App Store v2ex – v2ex 的客户

记自己的第一个完整的java web项目

我是从asp.net平台转到java平台的.基于asp.net平台开发网站的快速便捷性,工作几年来大小网站多少也写了6.7个.但是转到java后,因为是在一家大公司,而且做的功能也比较单一,局限于此,一直未能使用java来写一个web站点.后来正好大学同学从事淘宝电商,让我帮他弄一个网站,所以我就想到了使用java来开发这个站点,正好练手一下java顺便也是使用一下bae,因为很早之前就接触到了BAE,但是问题在于无法部署asp.net的网站,所以只好作罢,这次正好是一个难得的机会.     考

解题报告——2018级2016第二学期第一周作业

解题报告——2018级2016第二学期第一周作业 D 算24 题目描述 描述 给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式.现在的问题是,是否存在一种方式使得得到的表达式的结果等于24. 这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法). 比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24.又比如,对于1,1,4,2,我们怎么都不能得到24. 输入 输入数据包括多

swift2.2 我的第一個XCode APP程式

STEP1:開啟 Xcode 6 到Application 中,選取Xcode 6 ,來打開程式編輯環境工具. 圖5 選取Xcode 6. STEP2: 版權宣告的視窗 第一次執行時會出現版權宣告的視窗,只要選取"Agree同意"按鍵. 圖6 選取"Agree同意"按鍵 STEP3:建立一個全新的程式專案 在進入"Xcode 的歡迎視窗"後,請選取"Create a new Xcode project",來建立一個全新的程式專

私人通讯录

一.私人通讯录 什么是Segue ● Storyboard上每?一根?用来界?面跳转的线,都是?一个UIStoryboardSegue对象(简称Segue) "[登录界面]" 1.掌握UIStoryboardSegue对象 (1)在storyboard中,可以通过连线完成多个界面间的跳转,每一连线我们称为segue (2)掌握storyboard中的segue连线有两种,一是自动跳转.二是手动跳转 自动跳转从按钮连线,不管账号和密码是不是正确,就直接跳到下一个界面,而手动跳转,是用控制

iOS开发UI篇—实现一个私人通讯录小应用(二)

iOS开发UI篇—实现一个私人通讯录小应用(二) 一.实现功能说明 (1)点击注销按钮,弹出一个对话框,点击确定后移除当前栈顶的控制器,返回开始界面,点击取消,不做任何操作. 注意:注销按钮的单击事件已经进行了连线.实现-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex需要遵守UIActionSheetDelegate协议. 1 //注销按钮 2 - (IBActi