属性列表

属性列表文件是一种XML文件,Foundation框架中的数组和字典等都可以于属性列表文件相互转换。

NSArray类常用读写属性列表文件的方法

+arrayWithContentsOfFile:类级构造方法,用于从属性列表文件中读取数据,创建NSArray对象。

-initWithContentsOfFile:实例构造方法,用于从属性列表文件中读取数据,创建NSArray对象。

-writeToFile:atomically:该方法把NSArray对象写入到属性列表文件中,第一个参数是文件名,第二个参数为是否使用辅助文件,如果为YES,则先写入到一个辅助文件,然后辅助文件再重新命名为目标文件,如果为NO,则直接写入到目标文件。

NSDictionary类常用读写属性列表文件的方法:

+dictionaryWithContentsOfFile:类级构造方法,用于从属性列表文件中读取数据,创建NSDictionary对象。

-initWithContentsOfFile:实例构造方法,用于从属性列表文件中读取数据,创建NSDictionary对象。

-writeToFile:atomically:该方法将NSDictionary对象写入到属性列表文件中。

属性列表文件数据持久化具体方法,可参考以下实现方式:

假如在项目中手工创建了一个Contacts.plist文件,并在该文件中添加了几条数据,如下图所示。

当然也可以通过代码直接创建plist文件。

接下来需要做的是将项目资源的Contacts.plist文件中数据复制到沙箱Documents目录下。

//对文件进行预处理,判断在Documents目录下是否存在plist文件,如果不存在则从资源目录下复制一个。
-(void)createEditableCopyOfDatabaseIfNeeded
{
NSFileManager *fileManager=[NSFileManager defaultManager];
NSString *writableDBPath=[self applicationDocumentsDirectoryFile]; BOOL dbexits=[fileManager fileExistsAtPath:writableDBPath];
if (!dbexits) {
NSString *defaultDBPath=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Contacts.plist"]; NSError *error;
BOOL success=[fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error]; if (!success) {
NSAssert1(0,@"错误写入文件:‘%@’",[error localizedDescription]);
}
}
} //获取放置在沙箱Documents目录下的文件的完整路径
-(NSString *)applicationDocumentsDirectoryFile
{
NSString *documentDirectory=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *path=[documentDirectory stringByAppendingPathComponent:@"Contacts.plist"]; return path;
}

createEditableCopyOfDatabaseIfNeeded方法中

NSFileManager的copyItemAtPath:toPath:error:方法实现文件复制。

NSAssert1是Foundation框架提供的宏,它在断言失败的情况下抛出异常,类似的还有NSAssert和NSAssert2等。

applicationDocumentsDirectoryFile方法中

stringByAppendingPathComponent:能够在目录后面追加文件名,返回完整的文件路径。

沙箱Documents目录下成功生成plist文件之后,就可以进行增、删、改、查操作了。可参考如下代码:

NSString *path=[self applicationDocumentsDirectoryFile];

    //将属性列表文件内容读取到array变量中,也就是获取了属性列表文件中全部的数据集合
NSMutableArray *array=[[NSMutableArray alloc]initWithContentsOfFile:path]; //向array中添加一条新记录
NSDictionary *newContact=[NSDictionary dictionaryWithObjects:@[contact.Title,contact.Type] forKeys:@[@"Title",@"Type"]];
[array addObject:newContact]; //删除array中一条记录
[array removeObjectAtIndex:0]; //删除array中全部记录
[array removeAllObjects]; for (NSDictionary* dict in array) {
//通过for循环,找到需要修改的数据项,进行修改数据
[dict setValue:@"Test" forKey:@"Title"];
} //将array重新写入属性列表文件中
[array writeToFile:path atomically:YES];

注:完成后,需要选择Product->Clean菜单项清除一些再编译。

iOS-数据持久化-属性列表的更多相关文章

  1. iOS数据持久化存储之属性列表

    属性列表(plist) iOS提供了一种plist格式的文件(属性列表)用于存储轻量级的数据,属性列表是一种XML格式的文件,拓展名为plist.如果对象是NSString.NSDictionary. ...

  2. iOS 数据持久化(扩展知识:模糊背景效果和密码保护功能)

    本篇随笔除了介绍 iOS 数据持久化知识之外,还贯穿了以下内容: (1)自定义 TableView,结合 block 从 ViewController 中分离出 View,轻 ViewControll ...

  3. iOS开发笔记-swift实现iOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (plist.NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data.第三方类库等 归档(又名 ...

  4. IOS数据持久化之归档NSKeyedArchiver

    IOS数据持久化的方式分为三种: 属性列表 (自定义的Property List .NSUserDefaults) 归档 (NSKeyedArchiver) 数据库 (SQLite.Core Data ...

  5. iOS -数据持久化方式-以真实项目讲解

    前面已经讲解了SQLite,FMDB以及CoreData的基本操作和代码讲解(CoreData也在不断学习中,上篇博客也会不断更新中).本篇我们将讲述在实际开发中,所使用的iOS数据持久化的方式以及怎 ...

  6. iOS数据持久化方式及class_copyIvarList与class_copyPropertyList的区别

    iOS数据持久化方式:plist文件(属性列表)preference(偏好设置)NSKeyedArchiver(归档)SQLite3CoreData沙盒:iOS程序默认情况下只能访问自己的程序目录,这 ...

  7. iOS 数据持久化(1):属性列表与对象归档

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css); @import url(/ ...

  8. iOS数据持久化-OC

    沙盒详解 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文 ...

  9. iOS数据持久化

    在iOS中,实现数据持久化一般分为4大种: 1.属性列表 2.对象归档 3.SQLite 4.Core Data 一.属性列表 NSUserDefaults类的使用和NSKeyedArchiver有很 ...

  10. iOS数据持久化存储:归档

    在平时的iOS开发中,我们经常用到的数据持久化存储方式大概主要有:NSUserDefaults(plist),文件,数据库,归档..前三种比较经常用到,第四种归档我个人感觉用的还是比较少的,恰恰因为用 ...

随机推荐

  1. 使用PouchDB来实现React离线应用

    最近听到有同学在讨论关于数据上传遇到离线的问题,因此在这里介绍一下PouchDB. PouchDB 是一个开源的javascript数据库,他的设计借鉴于Apache CouchDB,我们可以使用他来 ...

  2. [转]ORACLE 审计功能

    审计是对选定的用户动作的监控和记录,通常用于: u          审查可疑的活动.例如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计,以及对数据库的所有表的成功地或不 ...

  3. poj 2482 Stars in Your Window (线段树:区间更新)

    题目链接:http://poj.org/problem?id=2482 读完题干不免有些心酸(

  4. Number of 1 Bits

    class Solution { public: int hammingWeight(uint32_t n) { string aaa = toBinary(n); ; ; i < sizeof ...

  5. MongoDB学习笔记—02 MongoDB入门

    Mongodb的基本概念 文档:是MongoDB中数据的基本单元,类似于关系型数据库中的行. 集合:多个文档组成一个集合,类似于关系型数据库中的表. 数据库:MongoDB的当个实例可以容纳多个独立的 ...

  6. Java学习日记之 Java-IO流

    Java中的IO流在处理上分为字节流和字符流.字节流和字符流的区别 : 1.字节流读取的时候,读到一个字节就返回一个字节:  字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8 ...

  7. CSAPP读书随笔之一:为什么汇编器会将call指令中的引用的初始值设置为-4

    CSAPP,即<深入理解计算机系统:程序员视角>第三版,是一本好书,但读起来确需要具备相当的基本功.而且,有的表述(中译文)还不太直白. 比如,第463页提到,(对于32位系统)为什么汇编 ...

  8. 链表反转 (Multi-method)

    链表反转是链表相关问题最基础的知识,做完LeetCode中LinkedList后才会有这种体会,因为ACM算法中不会涉及这一部分.解决这一问题有多种方法,在面试中面试官通常也会要求写出多种.包括sta ...

  9. asp.net中实现文件下载功能

    //TransmitFile实现下载    protected void Button1_Click(object sender, EventArgs e)      {         /*     ...

  10. 手Q兴趣号的价值在哪里

    拥有5.21亿月活跃用户,如果不做点什么东西出来,实在是浪费至极.如此庞大的用户量,如果能够将内容贡献出来,那将是恐怖的,QQ空间产品就是很好的佐证. QQ群让个体用户能够连接在一起,单个的用户关系链 ...