NSUser默认值 仅保存上次输入的数据



>我在 ViewController2 中单击按钮时使用 NSUserDefaults 保存文本字段文本 我的代码是

ButtonClick()
{
    NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults];
    [userDefaults setObject:keyWordField.text forKey:@"Keywords"];
    [userDefaults synchronize];
}
Then ViewDidLoad method i am Retrieving like this
-(void)viewDidLoad
{
NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults];
[keyWordArray addObject:[userDefaults objectForKey:@"Keywords"]];
[userDefaults synchronize];
}

在这里,我将这个键字数组分配给表视图喜欢cell.textlabel.text =[keyWordArray objectAtIndex:indexPath.row];

First i entered text(First) in textfield and click button it is showing in table like
     First
Second time i entered text (second) in textfield and click button it is showing table like
      First
      Second
Here everything working fine. The problem is when i come to viewController2 from ViewController1. It is showing last entered value only 
like
      Second

这里出了什么问题?

试试这个

- (IBAction)buttonclick:(id)sender {
[keyWordArray addObject:keyWordField.text];
NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults];
[userDefaults setObject:keyWordArray forKey:@"Keywords"];
[userDefaults synchronize];
[selt.tableView reload];  //reload the table every time a new text is added
}
-(void)viewDidLoad {
 if([[NSUserDefaults standardUserDefaults] objectForKey:@"Keywords"]==nil){
  keyWordArray = [[NSMutableArray alloc] init];
 }
 else{
 keyWordArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"Keywords"];
 }
}

试试这个,

- (IBAction)buttonclick:(id)sender {
    [keyWordArray addObject:keyWordField.text];
    NSUserDefaults *userDefaults =[NSUserDefaults standardUserDefaults];
    [userDefaults setObject:keyWordArray forKey:@"Keywords"];
    [userDefaults synchronize];
}

-(void)viewDidLoad
{
    NSArray *array = [[NSUserDefaults standardUserDefaults] objectForKey:@"Keywords"];
    if (!array) {
        keyWordArray = [[NSMutableArray alloc] init];
    } else {
        keyWordArray = [NSMutableArray arrayWithArray:nameArray];
    }
}

由于您正在覆盖您的

[userDefaults setObject:keyWordField.text forKey:@"Keywords"];

不时地,数组中的每个对象都将引用您的[userDefaults setObject:keyWordField.text forKey:@"Keywords"];对象,这就是问题所在

因为如果你导航到另一个视图控制器。 因为您的用户默认值仅保存在第二位

  1. 弹出后返回视图DidLoad被加载。 到目前为止,它的第二个字符串仅保存在用户默认值中。

这样它只显示第二。

您的代码正在覆盖最后一个值并从 NSUserDefault 中删除以前的值。您必须使用数组来存储所有值,并且已将数组保存到NSUserDefault中。

NSMutableArray *aryDataDefault = [[NSUserDefaults standardUserDefaults] valueForKey:@"YourKey"];
[aryDataDefault addObject:textfield.text];
[[NSUserDefaults standardUserDefaults] setObject:aryDataDefault forKey:@"YourKey"];
[[NSUserDefaults standardUserDefaults] synchronize];

相关内容

最新更新