iOS开发-本地存储(偏好设置,Plist,归档)

 

 

1.   NSUserDefaults

    //TODO: 1.NSUserDefaults    NSUserDefaults类除了可以存储数组、字典、NSdata外,还可以直接存储OC基本类型属性。但是不能直接作用到自定义对象.
    [[NSUserDefaults standardUserDefaults] setObject:@"" forKey:@""];//设置初始值
    [[NSUserDefaults standardUserDefaults] synchronize];//进行同步
    
    [[NSUserDefaults standardUserDefaults] objectForKey:@""];//取值

2.    Plist

    //TODO: 2.Plist文件
    //1.根据已有plist文件取值
    NSString *pathString = [[NSBundle mainBundle] pathForResource:@"Property List" ofType:@"plist"];
    //如果plist文件是一个NSArray,用数组取
    NSArray *array = [NSArray arrayWithContentsOfFile:pathString];
    //如果plist文件是一个NSDictionary,用字典取
    NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:pathString];
    //2.创建plist文件
    NSArray *homeDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentString = homeDirectory[0];
    NSString *documentPath = [documentString stringByAppendingPathComponent:@"GCD.plist"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    [fileManager createFileAtPath:documentPath contents:nil attributes:nil];
    
    NSArray *fileArray = @[@{@"name":@"one"},@{@"name":@"two"}];
    [fileArray writeToFile:documentPath atomically:YES];//写入数据
    
    NSArray *readArray = [NSArray arrayWithContentsOfFile:documentPath];//读取数据

 

3.  归档、解档

    //TODO: 3.归档/解档
    archiveModel *model = [[archiveModel alloc]init];
    model.name = @"小明";
    model.age = @"18";
    model.sex = @"";

    NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *filePath = [pathArray[0] stringByAppendingPathComponent:@"model"];
    
    /*
    一.只归档一个对象
    
    [NSKeyedArchiver archiveRootObject:model toFile:filePath];
    */
    
    /*
     一.只解档一个对象
     if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
     //路径存在
     archiveModel *readModel = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
     NSLog(@"解档:%@",readModel);
     }
     */
    
    
    //二.归档多个对象
    NSMutableData *data = [[NSMutableData alloc]init];
    NSKeyedArchiver *keyedArchiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];
    [keyedArchiver encodeObject:model forKey:@"model"];
    //[keyedArchiver encodeObject:model forKey:@"key1"];
    //[keyedArchiver encodeObject:model forKey:@"key2"];
    [keyedArchiver finishEncoding];

    if ([data writeToFile:filePath atomically:YES]) {
        NSLog(@"归档成功");
    }
    
    
    //二.解档多个对象
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
        NSData *data = [NSData dataWithContentsOfFile:filePath];
        NSKeyedUnarchiver *keyedUnarchive = [[NSKeyedUnarchiver alloc]initForReadingWithData:data];
        archiveModel *readModel = [keyedUnarchive decodeObjectForKey:@"model"];
        //archiveModel *readModel = [keyedUnarchive decodeObjectForKey:@"key1"];
        //archiveModel *readModel = [keyedUnarchive decodeObjectForKey:@"key2"];
        [keyedUnarchive finishDecoding];

    }

 

posted on 2018-10-16 14:58  昔年随心  阅读(330)  评论(0编辑  收藏  举报

导航