数据存储的方式
Plist
数组
字典
字符串 --> plist文件是可以存的,但是不是直接支持,会改变plist文件的 文件格式
Preference :可以理解为封装的字典
字符串
BOOL
整数
归档解档
任何对象都可以直接保存为文件
沙盒 就是一个文件夹
Documnets -->我们需要操作的目录,备份的时候也会自动备份
Library/Caches -->缓存
Library/Preference -->偏好设置,一般是由系统自动管理
tmp -->随时有可能被删除
使用plist文件存储数据
1.只支持数组和字典
2.字符串可以用plist文件去存储,但是,会改变plist文件的文件格式
3.自定义对象不能通过plist存储,没有writToFile这个方法
获取文件路径
第一种:
NSString*path = NSHomeDirectory();//获取沙盒目录
//拼接 Documnets和文件名
NSString *filePath =[path stringByAppendingString:@"/Documents/aa.plist"];
//自动回增加一个 /
NSString *filePath =[path stringByAppendingPathComponent:@"/Documents/aa.plist"];
//直接获取 documents路径
/**
第一个参数:要查找的文件夹
第二个参数:要在哪个目录去找
第三个参数:是否要展开路径 YES
*/
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)[0];
//宏定义,直接根据文件名称,拼接文件的绝对路径,
#define kFilePath(fileName)([NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES)[0]stringByAppendingPathComponent:fileName])
// writeToFile:文件绝对路径
// atomically :原子性 ,保证数据的完成性
[arraywriteToFile:filePath atomically:YES];
用户偏好 ,只适合,比较少量的数据,最好 bool类型
[NSUserDefaultsstandardUserDefaults]
//存数据
//保存用户名
[defaults setObject:@"dd" forKey:@"name"];
//保存年龄
[defaults setInteger:18 forKey:@"age"];
//是否已婚
[defaults setBool:YES forKey:@"married"];
//存储数据完成之后,要做一次数据同步
[[NSUserDefaultsstandardUserDefaults] synchronize];
//取数据
NSString *name =[[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
NSInteger age =[[NSUserDefaults standardUserDefaults] integerForKey:@"age"];
BOOL married = [[NSUserDefaultsstandardUserDefaults] boolForKey:@"married"];
登录界面:
用户偏好
用户名
密码
记住密码switch的状态
自动登录switch的状态
什么情况下,需要记住用户名和密码?
1.当记住密码的开关为on的时候
2.在验证用户名和密码成功的地方,将要完成界面跳转之前 记录用户名和密码
在应用程序启动的时候
1.对是否记住密码进行判断
返回值为YES
1.填充用户名和密码
2.修改记住密码的状态为on
3.登录按钮为可用状态
2.对 自动登录做判断
YES
1.修改自动登录按钮的状态
2.调用登录按钮的监听方法
注销逻辑
1.清空textField
2.恢复按钮的状态off
3.禁用登录按钮
4.用户偏好要清空
ListViewController:
什么时候要进行归档?
1.添加
2.编辑
3.删除
4.当点击注销的时候,要清空数组,进行归档
只要数据发生了变化,就需要进行归档
UITabBarController
//设置控制器vc1的 title
// vc1.tabBarItem.title = @"第一个";
vc1.title = @"TryTry";
//设置item的image
vc1.tabBarItem.image =[UIImage imageNamed:@"tabbar_contacts"];
//设置imte的被选中的 image
vc1.tabBarItem.selectedImage= [UIImage imageNamed:@"tabbar_contactsHL"];
//设置通知数量
vc1.tabBarItem.badgeValue=@"10";
//向 tabBarController添加子控制器
[tabBarControlleraddChildViewController:vc1];
tabBarController.viewControllers=@[vc1, vc2,vc3];
如果在进行push的时候,要隐藏 tabBar
从 a push到 b
属性要在控制器b中设置
//拿到目标控制器
UIViewController*controller = segue.destinationViewController;
//当push的时候,隐藏掉 tabBar
controller.hidesBottomBarWhenPushed=YES;