plist 增删改查

XML -- plist

  • 存储的内容是键值对
  • plist 可存储的对象类型包括
NSData,
BOOL,
NSString,
NSDate,
NSArray,
NSDictionary
  • 存储plist和读取
    • 将对象存储至plist: 需要对象和路径,路径是完整路径,包含后缀名
    • 读取,是NSString或其他可归档类的类方法,如[NSString stringWithContentOfFile:(NSString *)path encoding...]等等
// 将一个对象存储(归档)至指定目录
-(void)DataStorage{
        //存储需要 对象及路径
        NSString *str  = @"Hellow";//对象
        NSString *path = @"/tmp/test.plist";//完整路径,包括待创建的文件名
        BOOL result = [str writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"success? = %d",result);
        // 读取,需要路径和编码类型,比如UTF8   
        NSString *getStr = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"get string = %@",getStr);
}

沙盒目录结构理解

  • 结构
    既然沙盒就是一个文件夹,那就看看里面有什么吧。沙盒的目录结构如下:
应用程序包
Documents
Library
    Caches
    Preferences
tmp
  • 目录特性 —— 以下的区别唯一是path路径的区别
    虽然沙盒中有这么多文件夹,但是没有文件夹都不尽相同,都有各自的特性。所以在选择存放目录时,一定要认真选择适合的目录。
    • 应用程序包": 这里面存放的是应用程序的源文件,包括资源文件和可执行文件。
NSString *path = [[NSBundle mainBundle] bundlePath];
NSLog(@"%@", path);
  • Documents: 最常用的目录,iTunes同步该应用时会同步此文件夹中的内容,适合存储重要数据。
NSString *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSLog(@"%@", path);
  • Library/Caches: iTunes不会同步此文件夹,适合存储体积大,不需要备份的非重要数据。
NSString *path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
NSLog(@"%@", path);
  • Library/Preferences: iTunes同步该应用时会同步此文件夹中的内容,通常保存应用的设置信息。

  • tmp: iTunes不会同步此文件夹,系统可能在应用没运行时就删除该目录下的文件,所以此目录适合保存应用中的一些临时文件,用完就删除。

NSString *path = NSTemporaryDirectory();
NSLog(@"%@", path);
  • 最后的文件路径为
NSString *fileName = [path stringByAppendingPathComponent:@"xxx.plist"];

plist的增删改查

可以写入成plist的类如文首所写。

  • 增和改用的是类似的实例化方法
// KVclass 包含NSArray,NSDictionary,NSString等
[KVclass writeToFile:plistPath atomically:YES];
NSMutableDictionary *searchdata = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

  • 改和增很类似。不过改的方式,是先读出对应的数据,改成NSMutableDictionary,改动字典中的内容后,再重新用"增"的方法写进去。
//获取路径
NSString *filepath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"sandbox.plist"];
//所有的数据列表
NSMutableDictionary *datalist= [[[NSMutableDictionary alloc]initWithContentsOfFile:filepath]mutableCopy];
//获取Login节点
NSMutableDictionary *loginData = [datalist objectForKey:@"Login"];
[loginData setValue: @"FlyElephant" forKey:@"UserName"];
[loginData setValue: @"123456" forKey:@"UserPassWord"];
[datalist setValue:loginData forKey:@"Login"];
[datalist writeToFile:filepath atomically:YES];
NSLog(@"修改成功");
NSFileManager *manager=[NSFileManager defaultManager];
if ([manager removeItemAtPath:filepath error:nil]) {
        NSLog(@"文件删除成功");
    }

实例代码

// 写入document沙盒
NSString *path     = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSString *fileName = [path stringByAppendingPathComponent:@"districtOutlineInfo.plist"];
self.districtNameArray = [[NSMutableArray alloc] init];
[self.districtOutlineInfoDict writeToFile:fileName atomically:YES];

你可能感兴趣的:(plist 增删改查)