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

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

  

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

  

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

如果我们想做这样的一个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];

  

运行完上面的代码,我们用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,不甘心啊!!!!

iOS Plist文件,增删改查的更多相关文章

  1. iOS开发-plist文件增删改查

    plist第一次看到这个后缀名文件的时候感觉怪怪的,不过接触久了也就习以为常了,plist是Property List的简称可以理解成属性列表文件,主要用来存储串行化后的对象的文件.扩展名为.plis ...

  2. iOS开发——数据持久化OC篇&plist文件增删改查操作

    Plist文件增删查改   主要操作: 1.//获得plist路径    -(NSString*)getPlistPath: 2.//判断沙盒中名为plistname的文件是否存在    -(BOOL ...

  3. iOS CoreData (一) 增删改查

    代码地址如下:http://www.demodashi.com/demo/11041.html Core Data是iOS5之后才出现的一个框架,本质上是对SQLite的一个封装,它提供了对象-关系映 ...

  4. 【基础篇】js对本地文件增删改查

    [基础篇] js对本地文件增删改查--增 js对本地文件增删改查--删 js对本地文件增删改查--改 js对本地文件增删改查--查

  5. 【基础篇】js对本地文件增删改查--查

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

  6. 【基础篇】js对本地文件增删改查--改

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

  7. 【基础篇】js对本地文件增删改查--删

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

  8. 【基础篇】js对本地文件增删改查--增

    前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...

  9. iOS 数据库的增删改查(OC版)

    自己写了几个方法来实现数据的增删改查功能: 首先在TARGETS--->>Build phases里面添加数据库所关联的库文件libsqlite3.tbd 添加完以后,在控制器上添加 #i ...

  10. java实现xml文件增删改查

    java一次删除xml多个节点: 方案1.你直接改动了nodeList,这一般在做循环时是不同意直接这么做的. 你能够尝试在遍历一个list时,在循环体同一时候删除list里的内容,你会得到一个异常. ...

随机推荐

  1. Codeforces Round #199 (Div. 2) A Xenia and Divisors

    注意题目的数字最大是7 而能整除的只有 1,2,3,4,6,故构成的组合只能是1,2,4 或1,2,6或1,3,6,故分别统计1,2,3,4,6的个数,然后再分配 #include <iostr ...

  2. 【BZOJ】1191: [HNOI2006]超级英雄Hero(二分图匹配)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1191 一眼题,笑嘻嘻地写了匈牙利,提交..WA了?不科学!!!!!数组小了??不思考了,改大提交,. ...

  3. POST模拟百度登录和自动发帖

    这里用HttpClient发包模拟百度登录和发帖,验证码部分采用机器下载人工识别. 登陆百度的原理:1. 访问https://passport.baidu.com/v2/api/?getapi& ...

  4. 使用STL map 用 string 做索引 插入删除数据

    1.代码 #include <map> #include <string> #include <stdio.h> #include <vector> # ...

  5. HTML&CSS布局练习---360导航页面

    一共分为7个部分:由HTML和CSS外部样式表做成 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  6. MySQL表的创建和表中数据操作

    这篇文章主要介绍在navicat的命令界面操作mysql.主要涉及建立表结构,和对表中数据的增加删除修改查询等动作.站在一个新手角度的简单mysql表结构和数据操作. ☆ 准备工作 1,保证自己的电脑 ...

  7. FZU 1025 状压dp 摆砖块

    云峰菌曾经提到过的黄老师过去讲课时的摆砖块 那时百度了一下题目 想了想并没有想好怎么dp 就扔了 这两天想补动态规划知识 就去FZU做专题 然后又碰到了 就认真的想并且去做了 dp思想都在代码注释里 ...

  8. 解决Windows照片查看器中图片显示发黄的问题

    这其实是ICC颜色配置的问题,发生在Windows7自动更新下载了显示器的驱动后,自动安装后显示器的颜色配额制文件自动改为新下载的配置,导致显卡和显示器颜色配置不兼容的问题,不过不用担心,非常容易解决 ...

  9. jQuery Questions:Front-end Developer Interview Questions

    Explain "chaining". Chaining allows us to run multiple jQuery methods (on the same element ...

  10. Bootstrap页面布局9 - BS列表

    列表: 无序列表(列表中项目内容没有固定的顺序), 有序列表(通常使用在一组有前后顺序的内容上), 描述列表(定义解释一组词汇) 无序列表: <ul> <li>Ueditor编 ...