数组和字典兼容性

发布于 2024-09-09 06:06:12 字数 1331 浏览 7 评论 0原文

在 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];
                    }
                }
            }

In version 1.0 i am using NSMutableArray and inside that i am storing NSNumbers like

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

For storing my gameStatus.

In Next version(1.1) I want to update myArray like(by storing dictionary inside it)...

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];
}

My problem is how to provide compatibility for previous version 1.0.

Thanks in advance.

Updated : I am supporting Version 1.1 as shown below, is it ok.

//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];
                    }
                }
            }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

允世 2024-09-16 06:06:12

我认为您的观点是您在某个时候将它们保存到磁盘,并且您希望在升级后处理加载它们。有很多方法可以处理这个问题,但对于这种特定情况,我建议采用以下方法:

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

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

I assume your point is that you're saving these to disk at some point, and you want to handle loading them after upgrade. There are tons of ways to handle this, but here's what I would recommend for this specific case:

  • Change the name of the file you're saving to include the version number (savedata-1.1.plist).
  • When you startup, look for your new versioned filename. If it doesn't exist, look for your old filename. If that exists, load it using the old rules, convert the data, resave under the new name, and delete the old file.

This scales well when you get to v1.2 and change your data again. You will need to keep around your "how to read v1.0" code more or less forever (or at least until you completely drop support for upgrading from 1.0), but that's true in any case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文