iOS属性列表

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

NSArray和NSDictionary都提供了-writeToFile:atomically:方法来保存集合。也提供了+arrayWithContentsOfFile:和+dictionaryWithContentsOfFile:方法用以读取文件中的内容。

属性列表(property list)是一个标准的格式,是Cocoa Touch中一种轻量便携式的持续机制。属性列表使用一个.plist后缀的文件来存储对象实例。为了保持数据的可移植性,可以将数据存储为XML格式,或者更为高效的二进制格式。

如果打开Flashlight应用程序的资源文件夹,你会发现一个叫Flashlight-Info.plist的文件。这个文件包含了向iPhone OS描述这个应用的信息,比如它可以指定这个应用显示在iPhone上的图标。同样,当用户更新该应用程序的设置时,相关的配置信息会写入这个属性列表。

使用属性列表时,重要的是只使用以下几个类:NSArray、NSDictionary、NSString、NSData、NSDate和NSNumber(整数、浮点数和布尔值)。这些对象都可以存储到文件中。包含数字、字符串和日期的数组字典中的数据必须是完全校验正确的。

提示:如果想存储的某些对象不被属性列表支持,可以看一下NSKeyedArchiver类和NSCoding协议。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值