【问题标题】:Array and dictionary compatibility数组和字典兼容性
【发布时间】:2010-07-12 14:01:30
【问题描述】:

在 1.0 版中,我使用 NSMutableArray,在其中我存储 NSNumber,例如

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

用于存储我的游戏状态。

在下一个版本(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];
                    }
                }
            }

【问题讨论】:

    标签: iphone objective-c backwards-compatibility


    【解决方案1】:

    我假设您的意思是您在某个时候将这些保存到磁盘,并且您希望在升级后处理加载它们。有很多方法可以解决这个问题,但对于这种特定情况,我会推荐以下方法:

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 2014-09-24
      • 2012-02-14
      • 2012-10-11
      • 2015-01-19
      相关资源
      最近更新 更多