在我们用Xcode创建工程的时候,无时无刻都都被记录在了本地存储里面,如何找到你所建立的工程具体在本地的哪个文档里面,我们下面,做以下步骤:
点击打开Finder -> 左上角菜单栏点击前往,进去后摁住(+Alt)->点击进入 资源库->选中 Application Support ->继续进入 iPhone Simulator ->选择 7.1(版本,或多或少) -> 再点击进入Applications -> 打开任意文件夹(所有乱码命名的文件都是我们所建立的,或建立过的工程;
里面有很多文件夹:
.app文件夹
Bundle文件夹,Bundle包,
存储代码和工程里面左边的所有内容
包里面的内容在开发过程中可以修改,代码执行时不可以做任何修改。
Documents文件夹
存储在应用程序的生命周期内所有存储的内容
library文件夹
缓存,图片,网络加载的数据缓存
tmp
零时性存储,用不着的即可删除掉
为了更好的,更直观的了解,我们新建工程,再工程里面,我们如同以往,建立导航控制器;
#import "MainViewController.h"
#import "Student.h"
@interface MainViewController ()
@end
@implementation MainViewController
- (void)dealloc
{
[super dealloc];
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self searchAction];
[self writeString];
[self writeArray];
[self readString];
[self readArray];
[self writeDictory];
[self readDictory];
[self writeDate];
[self readDate];
[self userDefaultsWrite];
[self readUserDefaults];
[self archiveObject];
[self readArchiveObject];
}
#pragma mark 获取沙盒路径
-(void)searchAction{
NSArray *parths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"%@",parths);
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark 写入字符串
-(void)writeString{
NSArray *write = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);//获取路径
NSString * str = [write objectAtIndex:0];
str = [NSString stringWithFormat:@"%@%@",str,@"/text.txt"];//拼接字符串。/text.txt即文件名称和后缀名,可以任意,不需要写死
范厨师捡肥皂";
定义错误信息
存入信息
if (error) {
NSLog(@"error ===%@",error);
}
}
#pragma mark 读取字符串
-(void)readString{
//获取路径
NSString * str = [write objectAtIndex:0];
str = [NSString stringWithFormat:@"%@%@",str,@"/text.txt"];
NSString *value = [NSString stringWithContentsOfFile:str encoding:NSUTF8StringEncoding error:NULL];
//如何在原有字符串上拼接字符串
我们",value];//读取后拼接
拼接后在写入,原文件将被覆盖掉
读取新数组
NSLog(@"string ===%@",vlaues);
}
#pragma mark 写入数组
-(void)writeArray{
NSArray *write = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * str = [write objectAtIndex:0];
str = [NSString stringWithFormat:@"%@%@",str,@"/array.txt"];
范厨师捡肥皂",@"马特吃肥皂",nil];
[values writeToFile:str atomically:YES];
}
#pragma mark 读取数组
-(void)readArray{
NSArray *write = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * str = [write objectAtIndex:0];
str = [NSString stringWithFormat:@"%@%@",str,@"/array.txt"];
NSArray *vlaue = [NSArray arrayWithContentsOfFile:str];
NSLog(@"array====%@",vlaue);
}
#pragma mark 写入字典
-(void)writeDictory{
NSArray *write = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * str = [write objectAtIndex:0];
str = [NSString stringWithFormat:@"%@%@",str,@"/dic.txt"];
NSDictionary *value = [NSDictionary dictionaryWithObjectsAndKeys:@"mater",@"name",@"28",@"age", nil];
[value writeToFile:str atomically:YES];
}
#pragma mark 读取字典
-(void)readDictory{
NSArray *write = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * str = [write objectAtIndex:0];
str = [NSString stringWithFormat:@"%@%@",str,@"/dic.txt"];
NSDictionary *value = [NSDictionary dictionaryWithContentsOfFile:str];
NSLog(@"dictory======%@",value);
}
#pragma mark 二进制存储
-(void)writeDate{
NSArray *parth = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * str = [parth firstObject];
str = [NSString stringWithFormat:@"%@/date",str];
NSString *value = @"Hello world";
把字符串转换为UTF8形式的二进制格式
[date writeToFile:str atomically:YES];
NSLog(@"%@",date);
}
#pragma mark 二进制读取
-(void)readDate{
NSArray *parth = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * str = [parth firstObject];
str = [NSString stringWithFormat:@"%@/date",str];
NSData * data= [NSData dataWithContentsOfFile:str];
NSString *value = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"date=====%@",value);
}
//轻量存储
#pragma mark 写入轻量存储
-(void)userDefaultsWrite{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
不得不说" forKey:@"name"];
同步存储
[defaults synchronize];
}
#pragma mark 读取轻量存储
-(void)readUserDefaults{
NSString * value = [[NSUserDefaults standardUserDefaults]objectForKey:@"name"];
NSLog(@"%@",value);
}
#pragma mark复杂数据类型存储
//归档,即将自己创建的model类对象转换为二进制格式,通过二进制格式进行存储
#pragma mark 序列化
以下是我们自定义的model进行归档和解档:
在自定的model.h文件中,我们需遵行NSCoding协议,且如果我们只有name。sex。age三个属性。我们要在.m中实现如下操作:
-(instancetype)init{
self = [super init];
if (self) {
}
return self;
}
//归档协议,或者序列化协议
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.sex forKey:@"sex"];
NSNumber * num = [NSNumber numberWithInt:self.age];
[aCoder encodeObject:num forKey:@"age"];
}
//解档,反序列化
- (id)initWithCoder:(NSCoder *)aDecoder{
if (self = [super init]) {
self.name = [aDecoder decodeObjectForKey:@"name"];
self.sex = [aDecoder decodeObjectForKey:@"sex"];
NSNumber *num = [aDecoder decodeObjectForKey:@"age"];
把NSnumber强转为int型
}
return self;
既而在MainUiViewController里面进行归档和解档:
-(void)archiveObject{
Student *stu =[[Student alloc]init];
stu.name = @"mate";
男";
stu.age = 38;
归档为数组
NSData *data=[ NSKeyedArchiver archivedDataWithRootObject:arr];
// NSData *data=[ NSKeyedArchiver archivedDataWithRootObject:stu];//model归档
NSArray *parth = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * str = [parth firstObject];
str = [NSString stringWithFormat:@"%@/date",str];
[data writeToFile:str atomically:YES];
}
//解档,将归档后的二进制文件解档为想对应的model类的对象
-(void)readArchiveObject{
NSArray *parth = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * str = [parth firstObject];
str = [NSString stringWithFormat:@"%@/date",str];
NSData * data= [NSData dataWithContentsOfFile:str];
//归档时数组。解档也是数组。之后取model,如果时model归档。则model解档
NSArray *model =[NSKeyedUnarchiver unarchiveObjectWithData:data];
Student *stu = [model objectAtIndex:0];
// Student *model = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"%@",stu.name);
}
@end
只有轻量级存储存在library中,Preferences 的第二个文件中: