Object-C中使用NSKeyedArchiver归档(将各种类型的对象存储到文件中)
2015-01-05 14:36
393 查看
转:http://blog.csdn.net/enuola/article/details/7802371
将各种类型的对象存储到文件中,而不仅仅是字符串、数组和字典类型,有一种更灵活的方法。就是利用NSKeyedAarchiver类创建带键(keyed)的档案来完成。
Mac OS X从版本10.2开始支持带键的档案。在此之前,要使用NSArchiver类创建连续的(sequential)归档。连续的归档需要完全按照写入时的顺序读取归档中的数据。
在带键的归档中,每个归档字段都有一个名称。归档某个对象时,会为它提供一个名称,即键。从归档中检索该对象时,是根据这个键来检索的。这样可以按照任意的顺序将对象写入归档并进行检索。另外,如果向类添加了新的实例变量或删除了实例变量,程序也可以进行处理。
注意:iPhone SDK中没有提供NSArchiver。如果想在iPhone上使用归档功能,则必须使用NSKeyedArchiver。
代码示例如下:
[cpp] view
plaincopy
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
//---------------使用NSKeyedArchiver归档(存储各种类型的对象数据)-------------
//将字典数据写到文件glossary.archive中
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
];
[NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"];
//将文件glossary.archive中的数据读到字典对象并显示出来
NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"];
for(NSString *key in readglossary)
NSLog(@"%@: %@",key,[readglossary objectForKey:key]);
}
return 0;
}
其中,
[cpp] view
plaincopy
[NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"];
将字典glossary写入到文件glossary.archive中。可以为该文件指定任何路径名。在本例中,文件被写入当前目录下。
之后,又通过
[cpp] view
plaincopy
NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"];
方法将创建的归档文件读入执行程序中。这个语句将指定的文件打开并读取文件的内容,该文件必须是以前归档操作的结果。可以为文件指定完整路径名或相对路径名。
在显示结果之后,可以简单的通过枚举其内容来验证恢复是否成功。
将各种类型的对象存储到文件中,而不仅仅是字符串、数组和字典类型,有一种更灵活的方法。就是利用NSKeyedAarchiver类创建带键(keyed)的档案来完成。
Mac OS X从版本10.2开始支持带键的档案。在此之前,要使用NSArchiver类创建连续的(sequential)归档。连续的归档需要完全按照写入时的顺序读取归档中的数据。
在带键的归档中,每个归档字段都有一个名称。归档某个对象时,会为它提供一个名称,即键。从归档中检索该对象时,是根据这个键来检索的。这样可以按照任意的顺序将对象写入归档并进行检索。另外,如果向类添加了新的实例变量或删除了实例变量,程序也可以进行处理。
注意:iPhone SDK中没有提供NSArchiver。如果想在iPhone上使用归档功能,则必须使用NSKeyedArchiver。
代码示例如下:
[cpp] view
plaincopy
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
//---------------使用NSKeyedArchiver归档(存储各种类型的对象数据)-------------
//将字典数据写到文件glossary.archive中
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
];
[NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"];
//将文件glossary.archive中的数据读到字典对象并显示出来
NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"];
for(NSString *key in readglossary)
NSLog(@"%@: %@",key,[readglossary objectForKey:key]);
}
return 0;
}
其中,
[cpp] view
plaincopy
[NSKeyedArchiver archiveRootObject:glossary toFile:@"glossary.archive"];
将字典glossary写入到文件glossary.archive中。可以为该文件指定任何路径名。在本例中,文件被写入当前目录下。
之后,又通过
[cpp] view
plaincopy
NSDictionary *readglossary = [NSKeyedUnarchiver unarchiveObjectWithFile:@"glossary.archive"];
方法将创建的归档文件读入执行程序中。这个语句将指定的文件打开并读取文件的内容,该文件必须是以前归档操作的结果。可以为文件指定完整路径名或相对路径名。
在显示结果之后,可以简单的通过枚举其内容来验证恢复是否成功。
相关文章推荐
- Object-C中使用NSKeyedArchiver归档(将各种类型的对象存储到文件中)
- Object-C中使用NSKeyedArchiver归档(将各种类型的对象存储到文件中)
- Object-C中使用NSKeyedArchiver归档(将各种类型的对象存储到文件中)
- 使用hsql建立本地文件类型存储的数据库
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- plist文件的 偏好设置 存储与读取 自定义对象归档
- 进程间通信:使用file-mapping kernel object(文件映射内核对象)
- Python中使用pickle对内建类型(built in types)进行对象序列化(object serialization and deseirialzation)
- 干到底--三种存储类型比较-文件、块、对象存储
- 三种存储类型比较-文件、块、对象存储
- 各种类型文件在SQL Server中存储的解决方案
- ios-day12-04(ios开发中数据存储之NSKeyedArchiver归档(NSCoding)、普通对象如何归档、普通对象的子类如何归档)
- 黑马程序员------IO流 操作字节数组的流对象,对象序列化,打印流,随机存储文件,合并流,管道流,操作基本数据类型的流对象
- 使用Java序列化把对象存储到文件中,再从文件中读出来
- 三种存储类型比较-文件、块、对象存储
- 使用Java序列化把对象存储到文件中,再从文件中读出来
- 使用SharedObject存储对象地址
- ios数据存储之--对模型对象归档(NSKeyedArchiver、NSKeyedUnarchiver)
- 复杂对象的存储--model类型对象归档(序列化),NSCoding
- 如何将数据库中的数据存储成各种文件类型