iOS开发备忘录:属性列表文件数据持久化

原文:http://www.cnblogs.com/wzk89/p/3939782.html

属性列表文件是一种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菜单项清除一些再编译。

时间: 2024-12-06 09:38:41

iOS开发备忘录:属性列表文件数据持久化的相关文章

ios开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】

               在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运用: 在本节,将通过对4个文本框内容的创建.修改,退出后台,再重新回到后台,来认识这两种持久化数据的方式.效果图如下[图1]: [图1 GUI界面效果图] [本次开发环境: Xcode:7.2     iOS Simulator:iphone6S plus   By:啊左]     一.数据库SQL

iOS 开发指南 第11章 数据持久化之属性列表 学习

1 概述 沙箱目录:一种安全策略,原理是只能允许自己的应用访问目录,而不许其他应用访问. 子目录:Documents 用于储存非常大的文件或需要非常频繁更新的数据 NSArray *documentDirectory=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES): documentDirectory是只有一个元素的数组,还需要取出路径 NSString *myDocPath=[docum

iOS 开发指南 第11章 数据持久化之对象归档 学习

1 是一种序列化方式,先将归档对象序列化为一个文件,然后再通过反归档将数据恢复到对象中. 条件:该对象的类必须实现NSCoding协议,而且每个成员变量应该是基本数据类型或都是实现NSCoding协议的某个类的实例. 归档类NSKeyedArchiver 反归档类NSKeyedUnarchiver  NSData类提供了读取数据文件的方法 方法:+dataWithContentsOfFile: +dataWithContentsOfFile:options:指定读取数据选项error: -ini

iOS 开发指南 第11章 数据持久化之SQLite 学习

1 SQLite是无数据类型的数据库,就是字段不用指定类型.但从编程规范上说,应该在Create Table语句中指定数据类型:INTERGER 有符号的整数类型 REAL 浮点类型 TEXT 字符串类型 BLOB二进制类型 2 创建数据库: 准备:添加SQLite3库到工程中 TARGETS-Link Binary With Libraries-添加libsqlite3.dylib 使用sqlite3_open打开数据库-使用sqlite3_exec执行Creat Table语句,创建数据库-

Android开发学习---android下的数据持久化,保存数据到rom文件,android_data目录下文件访问的权限控制

一.需求 做一个类似QQ登录似的app,将数据写到ROM文件里,并对数据进行回显. 二.截图 登录界面: 文件浏览器,查看文件的保存路径:/data/data/com.amos.datasave/files/LoginTest.txt------/data/data/(包名)/files/(文件名) 导出的文件内容: 三.实现代码 新建一个Android 工程.这里我选择的是2.1即API 7,进行开发的,其它都是默认下一步下一步即可. /datasave/res/layout/activity

IOS中将对象属性列表归档成一个plist文件中

归档步骤: 1.将一个NSDictionary对象归档到一个plist属性列表中 <1> 首先要将数据封装成字典: NSMutableDictionary * dict = [NSMutableDctionary dictionary]; [dict setObject:@"烟灰" forKey:@"name"]; [dict setObject:@"1234567" forKey:@"phoneNumber"];

[Xcode10 实际操作]七、文件与数据-(3)创建文本文件、属性列表文件、图片文件

本文将演示如何创建各种类型的文件. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from a nib.

[Xcode10 实际操作]七、文件与数据-(9)编码创建Plist文件(属性列表文件)

本文将演示如何通过编码的方式,创建属性列表文件. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view, typically from

本篇对IOS中常用的5种数据持久化方法进行简单对比总结

 第1种:UserDefaults(iPhone开发[二十]数据持久化总结之第1篇-NSUserDefaults) 1)易用性很强 2)数据存储在.plist文件中 3)一般保存首选项信息.缓存数据等,适用存储较少量数据的情况 4)缺点:无法将自定义对象序列化到属性列表中 第2种:属性列表(iPhone开发[二十一]数据持久化总结之第2篇-属性文件(.plist)) 1)易用性较强 2)数据存储在.plist文件中 3)一般用于存储少量数据,也不适合操作处理大量数据 4)缺点:无法将自定义对象序