数组和字典兼容性

时间:2010-07-12 14:01:30

标签: iphone objective-c backwards-compatibility

在版本1.0中,我使用的是NSMutableArray,我在内部存储NSNumbers,如

NSMutableArray *myArray;
for(int i= 0 ; i < 10 ; i++)
[myArray addObject:[NSNumber numberWithInt:i]];

用于存储我的gameStatus。

在下一版本(1.1)中,我想更新 myArray (通过在其中存储字典)......

NSMutableArray *myArray;
for(int i= 0 ; i < 10 ; i++)
{
    NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
    [dict setValue:number forKey:@"index"];
    [dict setValue:[NSNumber numberWithBool:NO] forKey:@"isValid"];
    [myArray addObject:dict];
    [dict release];
}

我的问题是如何为以前的版本1.0提供兼容性。

提前致谢。

更新:我支持1.1版,如下所示,没问题。

//Version 1.1 support
//Read myArray

            if( [myArray count] > 0)
            {
                if( ![[myArray objectAtIndex:0] isKindOfClass:[NSMutableDictionary class]])
                {
                    for( NSNumber *number in myArray)
                    {
                        NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
                        [dict setValue:number forKey:@"index"];
                        [dict setValue:[NSNumber numberWithBool:NO] forKey:@"isValid"];
                        [dict release];
                    }
                }
            }

1 个答案:

答案 0 :(得分:1)

我认为您的观点是您在某些时候将这些文件保存到磁盘,并且您希望在升级后处理它们。有很多方法可以解决这个问题,但这是我对这个具体案例的建议:

  • 更改您要保存的文件的名称,以包含版本号(savedata-1.1.plist)。
  • 启动时,查找新版本的文件名。如果它不存在,请查找旧文件名。如果存在,请使用旧规则加载,转换数据,以新名称重新保存,然后删除旧文件。

当您转到v1.2并再次更改数据时,此功能可以很好地扩展。您将需要或多或少地永久保留“如何阅读v1.0”代码(或者至少在您完全放弃从1.0升级的支持之前),但无论如何都是如此。