我有一本对象字典;它们都是应该可序列化的 POCO 对象。我应该采用什么技术将它们写入磁盘。我正在寻找最简单的选项来编写一些列表来保存状态。
我想我有3个选择。
plist 文件。然而,这似乎仅限于仅存储预定义的对象(字符串、数字等),而不是对象(例如具有姓名和年龄的人)。
核心数据。 (3.0 中的新增功能)这会很好用;但是我的数据模型需要改变才能使这项工作起作用。这将是一次大规模的返工,我不确定是否值得付出努力。
SQLite。实现一个简单的 SQL 数据库来读取和读取。我对此进行了最少的研究,但我不想“重写”一些核心数据 ORM 函数。
要序列化自定义对象,您只需要符合NSCoding
协议。如果你的对象扩展了 NSObject,你需要做的就是(我相信)实现这些(例如 person 对象):
// Encode an object for an archive
- (void)encodeWithCoder:(NSCoder *)coder
{
[super encodeWithCoder:coder];
[coder encodeObject:name forKey:@“Name”];
[coder encodeInteger:age forKey:@“Age”];
}
// Decode an object from an archive
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
name = [[coder decodeObjectForKey:@“Name”] retain];
age = [coder decodeIntegerForKey:@“Age”];
}
NSArray
and NSDictionary
已经实现了序列化方法。它们将序列化它们所持有的所有对象(如果对象实现 NSCoder 接口 - 如果它们扩展 NSObject,则它们会序列化)。 NSObject 的encodeWithCoder
and initWithCoder
默认情况下不执行任何操作,因此除非您在类中实现自己的代码,否则不会序列化任何内容。
如果你有 NSArray 或 NSDictionary 对象,你可以使用以下方法同步它们:
// Writing
- (BOOL)writeToFile:(NSString *)aPath atomically:(BOOL)flag;
- (BOOL)writeToURL:(NSURL *)aURL atomically:(BOOL)flag;
// Reading
- (id)initWithContentsOfFile:(NSString *)aPath;
- (id)initWithContentsOfURL:(NSURL *)aURL;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)