2013-03-19 73 views
0

应用概览:NSDictionary和NSUserDefaults作为数据存储?

用户可以执行因特网速度测试和其他类型的具有不同试验的结果的。通常,测试结果存储在NSArrays和NSStrings中。

目的:

我试图创造一个历史系统,该系统允许用户返回并查看过去的结果。

问题:

我有一个很难搞清楚要使用的存储介质和怎么看都应该结合在一起。

有没有办法使用字符串或整数值命名NSUserDefaults?例如我有一个名为“hisName”的字符串,其值为“history1”,是否可以将NSUserDefaults * hisName命名为它,但将它还原为值history1?这个想法与每个测试的数字增量和新的历史默认值创建(历史2,历史3等)。

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

UPDATE:

我会尽力有点难以解释我在获得。

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

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

+0

你能否详细说明'还原为历史价值1' – Rakesh 2013-03-19 05:25:13

+0

是不是sqlite或核心数据存储更适合你试图完成什么! – ahmad 2013-03-19 05:31:09

+0

@Dan:您可以为key @“hisName”存储一个值为@“history”的字符串。问题是什么?为了增加字符串值,你必须实现你自己的逻辑。为此,你为什么需要一本字典? – Rakesh 2013-03-19 05:38:36

回答

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字典。您可以生成如上所示的新密钥。

但是,如果每个用户有多个用户和多个历史对象,则可能难以跟踪。相反,您可以将核心数据用于对象持久性/管理。

相关问题