Object-C使用XML属性列表进行归档

在Object-C术语中,归档是指用某种格式来保存一个或多个对象,以便以后还原这些对象的过程。通常,这个过程包括将(多个)对象写入文件中,以便以后读回该对象。

归档数据主要有两种方法:属性列表和带键值的编码。

Mac OS X上的应用程序使用XML属性列表(或plists)来存储诸如默认参数选择、应用程序设置和配置信息这样的数据。因此,了解如何创建和读回这些数据是很有用的。然而,这些列表的归档用途是有限的,因为当某个数据结构创建属性列表时,没有保存特定的对象类,没有存储对同一对象的多个引用,也没有保持对象的可变性。

如果你的对象时NSString、NSDictionary、NSArray、NSData或NSNumber对象,你可以使用在这些类中实现的writeToFile:atomically:方法将数据写到文件中。在写出某个字典或者数组的情况下,该方法可以使用XML属性列表的格式写出数据。

下面的例子显示了如何将字典作为属性列表写入文件中,然后读取到新的字典对象中,输出显示到控制台上:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        //创建字典作为属性列表写入文件
        NSDictionary *glossary = [NSDictionary dictionaryWithObjectsAndKeys:
                                  @"A class defined so other class can inherit from it.",@"abstract class",
                                  @"To implement all the methods defined in a protocol.",@"adopt",
                                  @"Storing an object for later use.",@"archiving",
                                  nil
                                  ];
        if([glossary writeToFile:@"glossary" atomically:YES] == NO)
            NSLog(@"Save to file failed!");
       
        //从文件中读取数据,存入字典并输出
        NSDictionary *readgloss;
        readgloss = [NSDictionary dictionaryWithContentsOfFile:@"glossary"];
        for(NSString *key in readgloss)
            NSLog(@"%@: %@",key,[readgloss objectForKey:key]);
        
    }
    return 0;
}


代码分析:

其中writeToFile:atomically:消息被发送给字典对象glossary,使字典以属性列表的形式写入到文件glossary中。atomically参数被设置为YES,表示希望首先将字典写入临时备份文件中,并且一旦成功,将把最终数据转移到名为glossary的制定文件中。这是一种安全措施,它保护文件在一些情况下(如系统在执行操作的过程中崩溃时)免受破坏。在这种情况下,原始的glossary文件(如果该文件已经存在)不会受到损害。

要将文件中的XML属性列表读入程序,使用dictionaryWithContentsOfFile:或arrayWithContentsOfFile:方法。要读回数据,使用dataWithContentsOfFile:方法,要读回字符串对象使用stringWithContentsOfFile:方法。

如果查看创建的glossary文件,他的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>abstract class</key>
	<string>A class defined so other class can inherit from it.</string>
	<key>adopt</key>
	<string>To implement all the methods defined in a protocol.</string>
	<key>archiving</key>
	<string>Storing an object for later use.</string>
</dict>
</plist>

从所创建的XML文件来看,它是以一种键(<key>....<key>)值(<string>...<string>)对的形式将字典写入文件的。

根据字典创建属性列表时,字典中的键必须全都是NSString对象。数组的元素或字典中的值可以是NSString、NSArray、NSDictionary、NSData或NSNumber对象。

你的属性列表不必从Object-C程序中创建,属性列表可以来自任何源。可以使用简单的文本编辑器,或使用Mac OS X系统中位于/Developer/Applications/Utilities目录下的Property List Editor程序来创建属性列表。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值