iOS DeveloperiOS开发

iOS 数据存储

2016-11-30  本文已影响0人  azhang_coder

1.plist文件存储

存数据
- (IBAction)save:(id)sender {
- 
    获取沙盒根根路径
    NSString *homeDir = NSHomeDirectory();
   
    在某个范围内搜索文件夹的路径.
    directory:获取哪个文件夹
    domainMask:在哪个路径下搜索
    expandTilde:是否展开路径.
    这个方法获取出的结果是一个数组.因为有可以搜索到多个路径.
    
    NSArray *array =  NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    
    在这里,我们指定搜索的是Cache目录,所以结果只有一个,取出Cache目录 NSString *cachePath = array[0];
    拼接文件路径
    NSString *filePathName = [cachePath stringByAppendingPathComponent:@"agePlist.plist"];
    
    想要把这个字典存储为plist文件.
    直接把字典写入到沙盒当中
    用字典写, plist文件当中保存的是字典.
    NSDictionary *dict = @{@"age" : @18,@"name" : @"gaowei"};
    
    获取沙盒路径
    ToFile:要写入的沙盒路径
    [dict writeToFile:filePathName atomically:YES];

    用数组写,plist文件当中保存的类型是数组.
    NSArray *dataArray = @[@56,@"asdfa"];
    获取沙盒路径
    ToFile:要写入的沙盒路径
    [dataArray writeToFile:filePathName atomically:YES];
  
}

读取数据
- (IBAction)reader:(id)sender {
- 
    这个方法获取出的结果是一个数组.因为有可以搜索到多个路径.
    NSArray *array =  NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    
    在这里,我们指定搜索的是Cache目录,所以结果只有一个,取出Cache目录
    NSString *cachePath = array[0];
    
    拼接文件路径
    NSString *filePathName = [cachePath stringByAppendingPathComponent:@"agePlist.plist"];
   
    从文件当中读取字典, 保存的plist文件就是一个字典,这里直接填写plist文件所存的路径
    NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:filePathName];
   
    如果保存的是一个数组.那就通过数组从文件当中加载.
    NSArray *dataArray = [NSArray arrayWithContentsOfFile:filePathName];
   
}

2.偏好设置存储

  // 保存用户信息至沙盒
  NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
                
  // 设置需要写入的数据
  [defaults setObject:self.accountTextF.text forKey:AZAccountInfo];
  [defaults setObject:self.pwdTextF.text forKey:AZPwdInfo];
  [defaults setBool:self.remPwdSwitch.isOn forKey:AZRemInfo];
  [defaults setBool:self.autoLoginSwitch.isOn forKey:AZAutoLoginInfo];
            
  // 立即写入文件
  [defaults synchronize];
  // 从沙盒中取出用户保存的设置
    NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults];
    
  // 通过用户保存的设置进行相应的设置
    self.remPwdSwitch.on=[defaults boolForKey:AZRemInfo];
    

3.归档

    //获取沙盒临时目录
    NSString *tempPath = NSTemporaryDirectory();
    NSString *filePath = [tempPath stringByAppendingPathComponent:@"persion.data"]; 
     // 写入数据
    [NSKeyedArchiver archiveRootObject:self.contactorArray toFile:filePath];
    
// 编码
- (void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:self.contactName forKey:@"name"];
    [aCoder encodeObject:self.phoneNum forKey:@"num"];
}

#define AZDataPath [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES).lastObject stringByAppendingPathComponent:@"contactor.data"]

// 解码
-(instancetype)initWithCoder:(NSCoder *)aDecoder
{
    if (self=[super init]) {
        self.contactName=[aDecoder decodeObjectForKey:@"name"];
        self.phoneNum=[aDecoder decodeObjectForKey:@"num"];
    }
    return self;
}

// 取出数据
 NSMutableArray *data=[NSKeyedUnarchiver unarchiveObjectWithFile:AZDataPath];
上一篇 下一篇

猜你喜欢

热点阅读