您的位置:首页 > 移动开发 > IOS开发

关于IOS处理plist的读写

2012-10-25 16:52 141 查看
今天在开发的时候,碰到一个任务,需要从服务器上获取正则表达式,放在.plist文件中。因为是新手,从来没处理过此类问题。于是进行www.google.com andwww.baidu.com 但是网络上的代码很杂乱,明显不适合我这个新手。花了很长时间才整理完成。记录之。

首先在工程中有个名为service.plist文件。此文件是放在app目录下面,编译的时候可读不可写。也就是说从服务器上取下来的数据,是无法写入这个文件上的。那么就需要

在项目启动之后拷贝一份到documents上。以下附上代码

//取得指向应用程序Documents目录的文件系统路径
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
//取得保存在documents中的文件(可能不存在)
NSString *path = [*documentsDirectory stringByAppendingFormat:@"service.plist"];
//取得app下建立的文件
NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"service" ofType:@"plist"];
//判断Documents是否有service.plist这个文件
if (![[NSFileManager defaultManager] fileExistsAtPath:path])
{
//如果没有,则将app下的文件拷贝一份到Documents下
[[NSFileManager defaultManager] copyItemAtPath:dataPath toPath:path error:nil];
}


然后在进行调用服务器接口,返回数据之后,可以通过以下方法写入数据。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingFormat:@"service.plist"];
NSMutableDictionary  *myDictionary = [[[NSMutableDictionary alloc] initWithContentsOfFile:path] autorelease];
//获得文本对象的节点值,因为我的节点就一个,所以可以直接去,如果有多重节点,要一个个取。
NSString* data1= [myDictionary objectForKey:@"telRegex"];
NSLog(@"第一次打印%@",data1);
//result.returnValue为我从服务器上取得的正则数据
NSString *numberValue = [NSString stringWithFormat:@"(^%@)",result.returnValue];
//因为文本中存在节点telRegex所以执行以下方法,是修改操作,如果不存在,则为新增操作
[myDictionary setObject:numberValue forKey:@"telRegex"];
NSString* data2= [myDictionary objectForKey:@"telRegex"];
NSLog(@"第二次打印%@",data2);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: