iOS开发之 UIAlertView 沙盒 归档
2015-09-11 20:13
513 查看
一、UIAlertView
- (void)showAlertWithMassage:(NSString *)message
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"账号注册" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
调用的时候 [self showAlertWithMassage:@"请输入账号"];
二、沙盒
1、沙盒(sandbox)
ios的沙盒(sandbox)机制:是一种安全体系,ios应用程序只能对自己创建的应用程序进行读取文件,这个独立、封闭、安全的空间,就是我们所说的沙盒。它里面一般存放着你的程序需要的文件,数据持久化的一些文件(Plist
、sqlite...)音视频,图片及其他资源文件。每一个应用程序只有一个沙盒
2、沙盒里面有三个文件夹
1.Documents 目录下得内容
会被同步到另一台设备 可以放
媒体资源 文本资源
2.Library 可以把缓存的内容放到Library里面/Cashes
3.tmp 创建临时文件的目录,当我们的设备重启时,文件会被自动清除
3、1⃣️获得根目录的方式
NSString *homePath = NSHomeDirectory();
NSLog(@“%@",homePath);
2⃣️获得Documents的方式
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *DocumentsPath = [paths firstObject];
NSLog(@“%@",DocumentsPath);
3⃣️Library目录
NSArray *paths2 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *LibraryPath = [paths2 lastObject];
NSLog(@"%@",LibraryPath);
4⃣️tmp目录
NSString *tmpPath = NSTemporaryDirectory();
NSLog(@“%@",tmpPath);
三、归档
、归档 NSKeyedArchiver 解归档NSKeyedUnarchiver
1、归档 又叫序列化(coding) 归档之后的文件会被加密 可以归档的文件、数据 : 任何数据(直接归档一个类实例化的对象 数组 字典 字符串 文本 图片 ...)
2、归档 NSKeyedArchiver
步骤
// 1、归档路径
需要归档的数据
// 2、归档、解归档
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject] stringByAppendingPathComponent:@“userList.achiver"];
NSArray *users = @[@"葫芦娃",@"喵喵",@"汪汪"];
BOOL success = [NSKeyedArchiver archiveRootObject:users toFile:path];
if (success) {
[self showAlertWithMessage:@"归档成功"];
}
NSLog(@“%@",path);
解归档
// 1、解归档的文件路劲(和归档的文件路径一样)
// 2、解归档
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList.achiver"];
NSArray *list = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
如果要添加东西进原来的数组里面,则
NSMutableArray *arr = [list mutableCopy];
[arr addObject:@"大A"];
for (NSString *name in arr) {
NSLog(@"%@",name);
}
—————第二种归档方式————-
NSData 二进制数据的一个类
归档
// 1、归档文件路径
准备需要归档的数据
// 2、写一个可变的二进制文件数据NSMutableData,
通过归档的类 让Data写入到文件
// 3、开始(归档)编码
// 4、结束(归档)编码
把Data数据写入到文件
// 1、归档文件路径
准备需要归档的数据
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList1.achiver"];
NSArray *list = @[@"111",@"222",@"333"];
NSDictionary *dic = @{@"key":@"value"};
// 2、写一个可变的二进制文件数据NSMutableData,
通过归档的类 让Data写入到文件
NSMutableData *data = [[NSMutableData alloc]init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
// 3、开始(归档)编码 (编码的key
和解码时候的key 一定要统一)
[archiver encodeObject:list forKey:@"list"];
[archiver encodeObject:dic forKey:@"dic"];
// 4、结束(归档)编码
把Data数据写入到文件
[archiver finishEncoding];
BOOL success = [data writeToFile:path atomically:YES];// atomically
如果设置成yes的时候
在写入数据时 如果出现意外情况(用户突然强制退出了应用程序、断电...)会把写入到临时文件的内容清除掉,不再写入到目标文件
如果是no,不管数据是否完整,都会直接写入到目标文件
if (success) {
[self showAlertWithMessage:@"归档成功"];
}
————————————————————————————————————-
解归档
// 1、文件路径
// 2、读取文件里面data数据
// 3、通过解归档对象
读取data数据
准备解归档
// 4、解归档数据
// 1、文件路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList1.achiver"];
// 2、读取文件里面data数据
NSData *data = [NSData dataWithContentsOfFile:path];
// 3、通过解归档对象
读取data数据
准备解归档
NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
// 4、解归档数据
NSArray *arr = [unArchiver decodeObjectForKey:@"list"];
NSDictionary *dic = [unArchiver decodeObjectForKey:@"dic"];
NSLog(@"%@\n%@",arr,dic);
————-
想归档自定义类的对象(UserModel。h。m)————-
// 1、遵守归档协议NSCoding
// 2、实现归档协议里面的方法
// 3、逐一对自定义类里面的属性进行了编码和解码
这时候,这个对象就具备了归档 解归档的功能
// 4、开始归档,解归档
// 归档
// 1、准备要归档文件的路径
要归档的数据
// 2、进行归档
/*
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"UserModel.archiver"];
UserModel *model = [[UserModel alloc]init];
model.name = @"葫芦娃";
model.age = 18;
BOOL success = [NSKeyedArchiver archiveRootObject:model toFile:path];
if (success) {
[self showAlertWithMessage:@"归档成功"];
}
在userModel.h中
。m中
- (void)showAlertWithMassage:(NSString *)message
{
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"账号注册" message:message delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alert show];
}
调用的时候 [self showAlertWithMassage:@"请输入账号"];
二、沙盒
1、沙盒(sandbox)
ios的沙盒(sandbox)机制:是一种安全体系,ios应用程序只能对自己创建的应用程序进行读取文件,这个独立、封闭、安全的空间,就是我们所说的沙盒。它里面一般存放着你的程序需要的文件,数据持久化的一些文件(Plist
、sqlite...)音视频,图片及其他资源文件。每一个应用程序只有一个沙盒
2、沙盒里面有三个文件夹
1.Documents 目录下得内容
会被同步到另一台设备 可以放
媒体资源 文本资源
2.Library 可以把缓存的内容放到Library里面/Cashes
3.tmp 创建临时文件的目录,当我们的设备重启时,文件会被自动清除
3、1⃣️获得根目录的方式
NSString *homePath = NSHomeDirectory();
NSLog(@“%@",homePath);
2⃣️获得Documents的方式
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *DocumentsPath = [paths firstObject];
NSLog(@“%@",DocumentsPath);
3⃣️Library目录
NSArray *paths2 = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *LibraryPath = [paths2 lastObject];
NSLog(@"%@",LibraryPath);
4⃣️tmp目录
NSString *tmpPath = NSTemporaryDirectory();
NSLog(@“%@",tmpPath);
三、归档
、归档 NSKeyedArchiver 解归档NSKeyedUnarchiver
1、归档 又叫序列化(coding) 归档之后的文件会被加密 可以归档的文件、数据 : 任何数据(直接归档一个类实例化的对象 数组 字典 字符串 文本 图片 ...)
2、归档 NSKeyedArchiver
步骤
// 1、归档路径
需要归档的数据
// 2、归档、解归档
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject] stringByAppendingPathComponent:@“userList.achiver"];
NSArray *users = @[@"葫芦娃",@"喵喵",@"汪汪"];
BOOL success = [NSKeyedArchiver archiveRootObject:users toFile:path];
if (success) {
[self showAlertWithMessage:@"归档成功"];
}
NSLog(@“%@",path);
解归档
// 1、解归档的文件路劲(和归档的文件路径一样)
// 2、解归档
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList.achiver"];
NSArray *list = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
如果要添加东西进原来的数组里面,则
NSMutableArray *arr = [list mutableCopy];
[arr addObject:@"大A"];
for (NSString *name in arr) {
NSLog(@"%@",name);
}
—————第二种归档方式————-
NSData 二进制数据的一个类
归档
// 1、归档文件路径
准备需要归档的数据
// 2、写一个可变的二进制文件数据NSMutableData,
通过归档的类 让Data写入到文件
// 3、开始(归档)编码
// 4、结束(归档)编码
把Data数据写入到文件
// 1、归档文件路径
准备需要归档的数据
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList1.achiver"];
NSArray *list = @[@"111",@"222",@"333"];
NSDictionary *dic = @{@"key":@"value"};
// 2、写一个可变的二进制文件数据NSMutableData,
通过归档的类 让Data写入到文件
NSMutableData *data = [[NSMutableData alloc]init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
// 3、开始(归档)编码 (编码的key
和解码时候的key 一定要统一)
[archiver encodeObject:list forKey:@"list"];
[archiver encodeObject:dic forKey:@"dic"];
// 4、结束(归档)编码
把Data数据写入到文件
[archiver finishEncoding];
BOOL success = [data writeToFile:path atomically:YES];// atomically
如果设置成yes的时候
在写入数据时 如果出现意外情况(用户突然强制退出了应用程序、断电...)会把写入到临时文件的内容清除掉,不再写入到目标文件
如果是no,不管数据是否完整,都会直接写入到目标文件
if (success) {
[self showAlertWithMessage:@"归档成功"];
}
————————————————————————————————————-
解归档
// 1、文件路径
// 2、读取文件里面data数据
// 3、通过解归档对象
读取data数据
准备解归档
// 4、解归档数据
// 1、文件路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"userList1.achiver"];
// 2、读取文件里面data数据
NSData *data = [NSData dataWithContentsOfFile:path];
// 3、通过解归档对象
读取data数据
准备解归档
NSKeyedUnarchiver *unArchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
// 4、解归档数据
NSArray *arr = [unArchiver decodeObjectForKey:@"list"];
NSDictionary *dic = [unArchiver decodeObjectForKey:@"dic"];
NSLog(@"%@\n%@",arr,dic);
————-
想归档自定义类的对象(UserModel。h。m)————-
// 1、遵守归档协议NSCoding
// 2、实现归档协议里面的方法
// 3、逐一对自定义类里面的属性进行了编码和解码
这时候,这个对象就具备了归档 解归档的功能
// 4、开始归档,解归档
// 归档
// 1、准备要归档文件的路径
要归档的数据
// 2、进行归档
/*
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths lastObject]stringByAppendingPathComponent:@"UserModel.archiver"];
UserModel *model = [[UserModel alloc]init];
model.name = @"葫芦娃";
model.age = 18;
BOOL success = [NSKeyedArchiver archiveRootObject:model toFile:path];
if (success) {
[self showAlertWithMessage:@"归档成功"];
}
在userModel.h中
<span style="font-size:14px;">@property (nonatomic,copy)NSString *name; @property (nonatomic,assign)NSInteger age;</span>
。m中
<span style="font-size:14px;">//对UserModel对象里面的每一个属性编码 - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.name forKey:@"name"]; [aCoder encodeInteger:self.age forKey:@"age"]; } //对UserModel对象进行解码 - (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if (self) { self.name = [aDecoder decodeObjectForKey:@"name"]; self.age = [aDecoder decodeIntegerForKey:@"age"]; } return self; }</span>
相关文章推荐
- iOS开发之 UITextField
- Storyboard中segue使用总结
- UE4ShaderPluginDemo
- UITableView Cell上添加按钮后改变选择状态
- iOS开发之 UILabel,UIButton
- 解决错误 Target runtime com.genuitec.runtime.generic.jee60 is not defined.
- iOS开发之 window , UIView
- iOS动态计算UIScrollView的contentSize示例(页面由Label组成)
- UIActivityIndicatorView的使用
- iOS开发-------简单通讯录(UITableView和CoreData的应用)
- HDU 5412——CRB and Queries——————【线段树套Treap(并没有AC)】
- easyui text如何 绑定 鼠标离开时间 及blur 事件
- [Android UI开发] 仿微信/支付宝的密码输入框效果:GridPasswordView
- [Android UI开发] 固定在ScrollView顶部的View,类似于新浪微博的评论列表的顶部
- [Android UI开发] Android常用工具类
- hdoj 1242 Rescue 【bfs】
- UITableView 分页显示、加载更多,数据源远程数据,解析JSON,以及iOS☞Category
- IOS开发UI展示之UITableView ──分页加载更多
- android Bluetooth程序设计
- UE4使用第三方库