我正在使用一个版本的 Archiver,并遇到了一个问题。
在我的项目的早期版本中,一个名为 Challenge 的类被序列化到磁盘上。
//v1.0
@interface Challenge : NSObject<NSCoding>
{
...
@property (nonatomic,strong) NSString *challengeId;
@property (nonatomic,strong) NSString *title;
@property (nonatomic) BOOL isCompleted;
...
}
现在,在应用程序的1.1版本中,希望通过添加两个新的@属性来更改Challenge对象。
//v1.1
@interface Challenge : NSObject<NSCoding>
{
...
@property (nonatomic,strong) NSString *challengeId;
@property (nonatomic,strong) NSString *title;
@property (nonatomic) BOOL isCompleted;
...
@property (nonatomic) BOOL isActive;
@property (nonatomic) NSInteger completeCount;
}
我的问题是,当Archiver尝试解码Challenge对象时,由于存在两个新属性(例如,Challenge v1.1与Challenge v1.0的复制或分配模式不匹配),则会引发异常。
基本上,有没有人迁移过NSEncoding对象,并遇到类似的情况,你使用了什么技术来解决这个问题?
我考虑的选项
到目前为止,我尝试在对象树中插入一个超类以覆盖Challenge,但无法使其正常工作。
此外,我考虑使用两步迁移,即发布v1.1,以旧格式解码持久化的挑战,并准备一种新类型的对象NewChallenge以备v1.2使用 - 这对我来说似乎过于复杂(考虑到我只想添加两个属性)。
我考虑扩展Challenge,并使属性存在于子类中,但这将意味着更改许多代码,这些代码期望看到一个Challenge对象。
任何见解都将不胜感激。