iOS Plist文件,增删改查

时间:2022-10-20 22:18:17

今天早上,9点开始弄Plist,然后一直写,一直写(中午取出40分钟吃饭时间),写到1点,写完了,交给头,头说,不是这个意思。我是每个用户创建了一个文件夹,在这个用户的文件夹里面,分别根据应用创建了文件夹,将Plist文件存在这个应用的文件夹中。头说:就只有一个Plist,这个Plist的命名是以用户名称来命名的,每个应用的名称和信息,记录在这个Plist文件里面。这个Document里面,只有一个Plist了。。刚睡醒午觉的我,灰灰地又回去改,有了上午的经验,半个小时,就弄出来了。去给头请示,又增加了两个小功能,分别是根据所给是name,去判断Plist里面是否包含了这个字段,如果有这个字段,返回yes;没有这个字段,返回NO。

  虽然我没做过,但是觉得不难,头说,要不我做,然后我说,不用,我做就行。回去鼓捣了半个小时,就提交SVN了。

  

  以前也写过Plist,不知道怎么是咋的了,觉得好笨啊。整过来整过去,把自己给弄乱了,而且,测试的时候,也没有针对性,测了半天,还是有bug。理解需求方面,也不行。好郁闷。不过,还好,觉得自己一直在进步,萌萌哒~

  

  刚才自己写了一个小demo,简单总结了一下。

iOS Plist文件,增删改查iOS Plist文件,增删改查iOS Plist文件,增删改查iOS Plist文件,增删改查

如果我们想做这样的一个Plist文件的话,代码如下:

    /**
     *  在document下建立plist
     */
    NSString * documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
    
    //也可以这样添加后缀
    NSString * plistName = [[NSString stringWithFormat:@"test"]stringByAppendingPathExtension:@"plist"];
    NSString * plistPath =[documentPath stringByAppendingPathComponent:plistName];
    
    //使用NSMutableDictionary来接收plist里面的文件
    NSMutableDictionary * plistDic = [[NSMutableDictionary alloc]initWithContentsOfFile:plistPath];
    
    //判断plist存不存在,如果不存在,则创建这个Dic,否则,后面的文件写入不进去
    if (plistDic == nil) {
        plistDic = [[NSMutableDictionary alloc]init];
    }
    
    //文件已经创建完,开始往里面添加数据
    NSMutableDictionary * nameDic = [plistDic objectForKey:@"name"];
    if (nil == nameDic) {
        nameDic = [[NSMutableDictionary alloc]init];
    }
    
    //这个nameDic里面,包含一个nameID和一个字典
    NSDictionary * nameItemDic = [NSDictionary dictionaryWithObjectsAndKeys:@"tangtang",@"xiaoming", nil];
    
    NSMutableDictionary * nameItemDic1 = [NSMutableDictionary dictionary];
    [nameItemDic1 setObject:@"tangtang" forKey:@"xiaoming"];
    [nameItemDic1 setObject:@"lili" forKey:@"nicheng"];
    [nameItemDic1 setObject:@"12" forKey:@"age"];
    
    NSMutableArray * nameArr = [NSMutableArray arrayWithArray:[nameDic objectForKey:@"nameArr"]];//因为,如果在之前有plist文件的话,我们需要将它取出来,然后在后面进行添加
    
    [nameArr addObject:nameItemDic];
    [nameArr addObject:nameItemDic1];
    NSString * name = @"tangtang";
    
    [nameDic setObject:name forKey:@"name"];
    [nameDic setObject:nameArr forKey:@"nameItem"];
    [plistDic setObject:nameDic forKey:name];
    [plistDic writeToFile:plistPath atomically:YES];

  iOS Plist文件,增删改查

运行完上面的代码,我们用iFunbox打开应用程序,在Document里面,就能看到这个Plist了。相对比较简单。

提供方法1:--查找是否包含这个name

/**
 *  遍历plist文件,取出里面想取出的东西
 *
 *  @return if find ,return YES;else ,return NO
 */
-(BOOL)queryPlistWithName:(NSString *)name{
    NSString * plistPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"test.plist"];
    NSMutableDictionary * plistDic = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
    if (nil == plistDic) {
        return NO;
    }
    NSArray * allKeys = [plistDic allKeys];
    for (int i = 0; i < allKeys.count; i++) {
        NSMutableDictionary * tempDic = [plistDic objectForKey:[allKeys objectAtIndex:i]];
        NSString * tempName = [tempDic objectForKey:@"name"];
        if ([tempName isEqualToString:name]) {
            NSLog(@"名字查找到了");
            return YES;
        }
    }
    
    return NO;
}

  提供方法二:删除该name

- (void)deletePlistWithName:(NSString *)name{
    NSString * plistPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"test.plist"];
    NSMutableDictionary * plistDic = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
    if (nil == plistDic) {
        return;
    }
    NSArray * allkeys = [plistDic allKeys];
    for (int i = 0; i < allkeys.coun

今天早上,9点开始弄Plist,然后一直写,一直写(中午取出40分钟吃饭时间),写到1点,写完了,交给头,头说,不是这个意思。我是每个用户创建了一个文件夹,在这个用户的文件夹里面,分别根据应用创建了文件夹,将Plist文件存在这个应用的文件夹中。头说:就只有一个Plist,这个Plist的命名是以用户名称来命名的,每个应用的名称和信息,记录在这个Plist文件里面。这个Document里面,只有一个Plist了。。刚睡醒午觉的我,灰灰地又回去改,有了上午的经验,半个小时,就弄出来了。去给头请示,又增加了两个小功能,分别是根据所给是name,去判断Plist里面是否包含了这个字段,如果有这个字段,返回yes;没有这个字段,返回NO。

  虽然我没做过,但是觉得不难,头说,要不我做,然后我说,不用,我做就行。回去鼓捣了半个小时,就提交SVN了。

  

  以前也写过Plist,不知道怎么是咋的了,觉得好笨啊。整过来整过去,把自己给弄乱了,而且,测试的时候,也没有针对性,测了半天,还是有bug。理解需求方面,也不行。好郁闷。不过,还好,觉得自己一直在进步,萌萌哒~

  

  刚才自己写了一个小demo,简单总结了一下。

iOS Plist文件,增删改查iOS Plist文件,增删改查iOS Plist文件,增删改查iOS Plist文件,增删改查

如果我们想做这样的一个Plist文件的话,代码如下:

    /**
     *  在document下建立plist
     */
    NSString * documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
    
    //也可以这样添加后缀
    NSString * plistName = [[NSString stringWithFormat:@"test"]stringByAppendingPathExtension:@"plist"];
    NSString * plistPath =[documentPath stringByAppendingPathComponent:plistName];
    
    //使用NSMutableDictionary来接收plist里面的文件
    NSMutableDictionary * plistDic = [[NSMutableDictionary alloc]initWithContentsOfFile:plistPath];
    
    //判断plist存不存在,如果不存在,则创建这个Dic,否则,后面的文件写入不进去
    if (plistDic == nil) {
        plistDic = [[NSMutableDictionary alloc]init];
    }
    
    //文件已经创建完,开始往里面添加数据
    NSMutableDictionary * nameDic = [plistDic objectForKey:@"name"];
    if (nil == nameDic) {
        nameDic = [[NSMutableDictionary alloc]init];
    }
    
    //这个nameDic里面,包含一个nameID和一个字典
    NSDictionary * nameItemDic = [NSDictionary dictionaryWithObjectsAndKeys:@"tangtang",@"xiaoming", nil];
    
    NSMutableDictionary * nameItemDic1 = [NSMutableDictionary dictionary];
    [nameItemDic1 setObject:@"tangtang" forKey:@"xiaoming"];
    [nameItemDic1 setObject:@"lili" forKey:@"nicheng"];
    [nameItemDic1 setObject:@"12" forKey:@"age"];
    
    NSMutableArray * nameArr = [NSMutableArray arrayWithArray:[nameDic objectForKey:@"nameArr"]];//因为,如果在之前有plist文件的话,我们需要将它取出来,然后在后面进行添加
    
    [nameArr addObject:nameItemDic];
    [nameArr addObject:nameItemDic1];
    NSString * name = @"tangtang";
    
    [nameDic setObject:name forKey:@"name"];
    [nameDic setObject:nameArr forKey:@"nameItem"];
    [plistDic setObject:nameDic forKey:name];
    [plistDic writeToFile:plistPath atomically:YES];

  iOS Plist文件,增删改查

运行完上面的代码,我们用iFunbox打开应用程序,在Document里面,就能看到这个Plist了。相对比较简单。

提供方法1:--查找是否包含这个name

/**
 *  遍历plist文件,取出里面想取出的东西
 *
 *  @return if find ,return YES;else ,return NO
 */
-(BOOL)queryPlistWithName:(NSString *)name{
    NSString * plistPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"test.plist"];
    NSMutableDictionary * plistDic = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
    if (nil == plistDic) {
        return NO;
    }
    NSArray * allKeys = [plistDic allKeys];
    for (int i = 0; i < allKeys.count; i++) {
        NSMutableDictionary * tempDic = [plistDic objectForKey:[allKeys objectAtIndex:i]];
        NSString * tempName = [tempDic objectForKey:@"name"];
        if ([tempName isEqualToString:name]) {
            NSLog(@"名字查找到了");
            return YES;
        }
    }
    
    return NO;
}

  提供方法二:删除该name

- (void)deletePlistWithName:(NSString *)name{
    NSString * plistPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"test.plist"];
    NSMutableDictionary * plistDic = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath];
    if (nil == plistDic) {
        return;
    }
    NSArray * allkeys = [plistDic allKeys];
    for (int i = 0; i < allkeys.count; i++) {
        NSMutableDictionary * tempDic = [plistDic objectForKey:[allkeys objectAtIndex:i]];
        NSString * tempName = [tempDic objectForKey:@"name"];
        if ([tempName isEqualToString:name]) {
            [plistDic removeObjectForKey:name];
            NSLog(@"删除成功");
            [plistDic writeToFile:plistPath atomically:YES];
            return;
        }
    }
    NSLog(@"未找到");
}

  写Plist,最主要的是:要明白自己的书写顺序,是字典还是数组,哪个是一级的,哪个是二级的,等等。

  还有就是不要忘记修改完之后,写入文件中。

 

总结完毕。。今天发工资,觉得自己的工资好低啊,旁边的邻居,刚开始找工作,就比我高1k,不甘心啊!!!!

t; i++) { NSMutableDictionary * tempDic = [plistDic objectForKey:[allkeys objectAtIndex:i]]; NSString * tempName = [tempDic objectForKey:@"name"]; if ([tempName isEqualToString:name]) { [plistDic removeObjectForKey:name]; NSLog(@"删除成功"); [plistDic writeToFile:plistPath atomically:YES]; return; } } NSLog(@"未找到");}

  写Plist,最主要的是:要明白自己的书写顺序,是字典还是数组,哪个是一级的,哪个是二级的,等等。

  还有就是不要忘记修改完之后,写入文件中。