0

应用概述:

用户可以执行 Internet 速度测试和其他类型的测试,并获得不同的结果。通常,测试的结果存储在 NSArrays 和 NSStrings 中。

目标:

我正在尝试创建一个历史系统,允许用户返回并查看过去的结果。

问题:

我很难弄清楚要使用哪种存储介质以及如何将它们组合在一起。

有没有办法使用字符串或整数值来命名 NSUserDefaults?例如,我有一个名为“hisName”的字符串,其值为“history1”,是否可以将 NSUserDefaults 命名为 *hisName 但将其恢复为值 history1?每次测试的想法是增加数字并创建新的历史默认值(history2、history 3 等)。

在这个应用程序的 Android 版本中,这是可能的。因此,该应用程序只是根据允许的最大历史数量动态创建“History-X”。当达到最大值时,第一个被覆盖。

更新:

我会更加努力地解释我的意思。

用户完成一个测试,我将所有需要的数据存储在一个名为 History1 的 NSUserDefaults/NSDictionary 文件中。

然后我将一个名为 HistoryCount 的整数的值增加到 2。现在,当用户执行另一个测试时,我想调用 NSUserDefaults/NSDictionary“History2”,其中 2 来自 Integer HistoryCount。我找不到用 NSString 等命名 NSUserDefaults/NSDictionary 的方法。

4

1 回答 1

0

使用此方法保存字典;

-(void)saveDefaults:(int)historyCount{
    NSDictionary *history1 = [NSDictionary dictionary]; //You already have this dictionary
    NSString *historyKey = [NSString stringWithFormat:@"history%d",historyCount];
    [[NSUserDefaults standardUserDefaults] setObject:history1 forKey:historyKey];
}

所以你的代码可能看起来像这样;

self.historyCount =1;

[user runTest]; //first run 
[user saveDefaults:self.historyCount];
self.historyCount++;


[user runTest];
[user saveDefaults:self.historyCount];
self.historyCount++;

等等..

如果您想要同一用户的多个历史字典对象,那么您可以将一组历史对象存储为一个数组(使用索引来访问历史对象),或者您可以使用带有键@"history1"和值的字典,即history1字典。您可以生成如上所示的新密钥。

但是,如果您有多个用户并且每个用户有许多历史对象,则可能很难跟踪。相反,您可以使用核心数据进行对象持久性/管理。

于 2013-03-19T06:22:39.513 回答