以编程方式加载使用NSCoding创建一个对象模型

一个应用程序的1.0版本有一个数据模型,它被保存/使用NSKeyed(UN)归档类加载,因为所有的模型类遵守NSCoding协议。 假设以下层次结构存在:

-> Houses (NSMutableArray) -> -> House (Custom Object) -> -> -> Color (3 ints, RGB) -> -> -> Number of Residents (int)

说,有存储在这样的方式遗留文件,但是需要被加载到应用程序的向后兼容的2.0版本,使用以下较新的数据模型:

-> Neighborhood (Maintains NSMutableArray, among other properties) -> -> TownHouse -> -> -> Color (3 ints, RGB) -> -> -> Occupants (NSMutableArray) -> -> (Other types of houses)

显然,一些数据将被丢失,需要填写。例如。 一个基本的“乘客”的对象将需要为每个“一些居民”存在之前创建。 我正在寻找的是一个方法,在以前的数据模型编程方式加载,特别是当我只有类/层次的列表,而不是.M / .h文件本身。

因此,我想要做的是(假设我有一个文件Houses.data,这是用房屋阵列序列化):

NSFile *legacyFile; Neighborhood *hood = [Neighborhood neighborhoodFromLegacyFile:legacyFile];

有任何想法吗?

--------------解决方案-------------

我觉得这里的技巧是使用setClass:由NSKeyedUnarchiver提供的功能:forClassName。 它可以让你说:“用一流的联排别墅反序列化类府的所有实例”

然后,你需要修改联排别墅的的initWithCoder:功能,来解无论是层次结构。 你可以做到这一点通过调用decodeObject或decodeObjectForKey:然后使用isKindOfClass:看什么类型的对象你处理。 您还可以使用containsValueForKey:想读出来之前检查某些键。

我希望帮助!

分类:iphone 时间:2012-10-28 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.178 (s). 9 q(s)