我在FirstVC中有两个Viewcontrollers我构建5 UITextField
进行注册,这个TextField值在字典中被最终存储在NSUserdefault
中的字典然后在SecondVC中我希望显示这些数据
我的问题是,每当我在NSUserdefault
中添加新的自由裁量权时,旧的字典被替换
我想要所有字典的数据。
下面是我的FirstVC的代码
-(void)btnReg
{
//data add in disctionary
for (int i=1; i<=5; i++)
{
UITextField *txtTemp=(UITextField *)[self.view viewWithTag:i];
[discRege setObject:[NSNumber numberWithInt:count] forKey:@"no"];
[discRege setObject:txtTemp.text forKey:[arraylblName objectAtIndex:i-1]];
}
//dictionary add in nsuserdefault
[[NSUserDefaults standardUserDefaults]setObject:discRege forKey:@"ABC"];
[[NSUserDefaults standardUserDefaults]synchronize];
//push to SecondVc
secondViewController *objSec=[[secondViewController alloc]init];
[self.navigationController pushViewController:objSec animated:YES];
[self.navigationController setNavigationBarHidden:false];
}
下面是我的SecondVC代码
ArratTemp =[[NSUserDefaults standardUserDefaults]objectForKey:@"ABC"] ;
if (!ArratTemp )
{
ArratTemp =[[NSMutableArray alloc]init];
}
else
{
ArratTemp = [[[NSUserDefaults standardUserDefaults]objectForKey:@"ABC"]mutableCopy];
}
NSLog(@"%@",ArratTemp);
答案 0 :(得分:2)
每次使用相同的密钥并替换现有的字典对象时......
char
不是将其存储为字典,而是将其存储为字典数组。每当您添加新注册时,获取已保存的数组,将新的字典对象添加到其中并使用该数组更新userDefaults。
// Using the same key will overwrite the last saved dictionary.
[[NSUserDefaults standardUserDefaults] setObject:discRege forKey:@"ABC"];
希望它有所帮助。
答案 1 :(得分:0)
你每次都要覆盖同一部分。
您有两种解决方案:
解决方案1。
将不同的词典存储在不同的键下,而不是全部位于“ABC”下。因此,在您的for loop
中,可以使用索引(i
)来创建多个条目,而不是每次都使用ABC。在这里,你可以自己解决一个简单的问题。确保不要将所有内容存储在同一个Key下,然后你会找到它们;)例如,你可以保存在[NSNumber numberWithInt:i]
下,然后浏览你的NSUserDefaults 0,1,2,3 ...等等。我建议不要这样做,解决方案2是要走的路。
解决方案2。
将所有词典存储在一个数组中,然后将该数组存储在NSUserDefaults中。
为此,只需创建一个保持为空的NSMutableArray
,然后在其中添加词典!
NSMutableArray dataArray = [[NSMutableArray alloc]init];
for (int i=1; i<=5; i++)
{
//Creating new dictionary
NSMutableDictionary *currentDict = [[NSMutableDictionary alloc]init];
//Getting the text we want
UITextField *txtTemp =(UITextField *)[self.view viewWithTag:i];
NSString *text = txtTemp.text;
//This is here because you had it
[currentDict setObject:[NSNumber numberWithInt:count] forKey:@"no"];
//All dictionaries will have key = name of the Label,
//but you could change it to something static, like
// "Content" for example. It'll be easier to find later
[currentDict setObject:text forKey:[arraylblName objectAtIndex:i-1]];
//Adding that newly formed dictionary to the mutable array.
[dataArray addObject:currentDict];
}
//Adding the array containing dictionaries to the NSUSerDefaults
[[NSUserDefaults standardUserDefaults]setObject:dataArray forKey:@"ABC"];
注意:我不完全确定你在for循环中对字典做了什么,但是由于你没有显示代码,我猜它'不是问题的一部分。根据我的回答,您有足够的信息可以在需要时进行一些更正。您需要记住的是: