Blu*_*ame 28 iphone cocoa serialization cocoa-touch cocoa-design-patterns
我有一个对象字典; 它们都是应该可序列化的POCO对象.我应该用什么技术将它们写入磁盘.我正在寻找最简单的选项来编写一些列表来保存状态.
我想我有3个选择.
plist文件.然而,这似乎仅限于存储预定义的对象(字符串,数字等)而不是对象(如具有名称和年龄的人).
CoreData.(3.0中的新功能)这样可以正常工作; 但是我的数据模型需要改变以使其工作.这将是一个巨大的返工,我不确定是否值得努力.
SQLLite.实现一个简单的SQL数据库来读取和读取.我已经对此进行了最少的研究,但我不想"重写"一些核心数据ORM函数.
ste*_*anB 33
要序列化自定义对象,您只需要符合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并且NSDictionary已经实现了序列化的方法.它们将序列化它们拥有的所有对象(如果对象实现了NSCoder接口 - 如果它们扩展了NSObject,它们会这样做).NSObject中的encodeWithCoder和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;
| 归档时间: | 
 | 
| 查看次数: | 19754 次 | 
| 最近记录: |