Ios 每当调用视图控制器时,保存在NSUserDefaults中的NSArray内容将被覆盖

Ios 每当调用视图控制器时,保存在NSUserDefaults中的NSArray内容将被覆盖,ios,objective-c,initialization,singleton,nsuserdefaults,Ios,Objective C,Initialization,Singleton,Nsuserdefaults,视图控制器包含: UITextField(名称) ui按钮(保存) 键入任何名称并点击save后,该名称将添加到使用NSUserDefaults存储的数组中 此视图控制器是从另一个视图控制器推送的,因此当我返回此视图控制器时,NSArray的内容将被我可能指定的新名称覆盖。我不确定这是什么原因造成的,但我怀疑这与NSArray的分配和初始化有关 在我的ViewDidLoad中,我做了NSMutableArray*namesList=[[NSMutableArray alloc]init] 在我的

视图控制器包含:

  • UITextField(名称)

  • ui按钮(保存)

  • 键入任何名称并点击save后,该名称将添加到使用
    NSUserDefaults
    存储的数组中

    此视图控制器是从另一个视图控制器推送的,因此当我返回此视图控制器时,
    NSArray
    的内容将被我可能指定的新名称覆盖。我不确定这是什么原因造成的,但我怀疑这与
    NSArray的
    分配
    初始化
    有关

    在我的ViewDidLoad中,我做了
    NSMutableArray*namesList=[[NSMutableArray alloc]init]

    在我的
    OnSave
    方法中

    [namesList addObject:nameTextField.text];
    [[NSUserDefaults standardUserDefaults] setObject:namesList forKey:@"namesListArray"];
    NSLog(@"items in array: %@",namesArray);
    
    编辑: 相关视图控制器的屏幕截图:

    在这里,当我单击添加按钮时,第二个视图控制器被按下。 当我输入“kenneth”并点击save时,控制台显示:

    2014-03-03 11:03:46.219 SmartWatch[664:a0b] items in array: (
    kenneth)
    
    2014-03-03 11:15:43.646 SmartWatch[664:a0b] items in array: (
    kenneth,
    john)
    
    2014-03-03 11:19:50.815 SmartWatch[664:a0b] items in array: (
    scott) 
    
    现在,不必返回到上一个视图控制器,当我键入另一个名称(如“john”)并点击save时,控制台会显示:

    2014-03-03 11:03:46.219 SmartWatch[664:a0b] items in array: (
    kenneth)
    
    2014-03-03 11:15:43.646 SmartWatch[664:a0b] items in array: (
    kenneth,
    john)
    
    2014-03-03 11:19:50.815 SmartWatch[664:a0b] items in array: (
    scott) 
    
    直到现在一切都很好。 当我返回到上一个控制器并返回到第二个视图控制器时,就会出现问题。现在,当我键入另一个名称时,请说“scott”,控制台会说:

    2014-03-03 11:03:46.219 SmartWatch[664:a0b] items in array: (
    kenneth)
    
    2014-03-03 11:15:43.646 SmartWatch[664:a0b] items in array: (
    kenneth,
    john)
    
    2014-03-03 11:19:50.815 SmartWatch[664:a0b] items in array: (
    scott) 
    
    这意味着前两个名称被覆盖。我希望数组也保留“kenneth”和“john”,而“scott”实际上应该附加到数组中

    我认为这是因为当第二个视图控制器再次出现在前台时,数组被初始化,但我不确定,我不知道如何纠正这一点


    希望问题现在清楚了。谢谢

    您是否正在执行任何功能来将元素存储到VIEWWILLEXPEND方法中的nsarray。
    如果没有,请正确指定代码以提供帮助

    添加
    [[NSUserDefaults standardUserDefaults]同步]
    在Other wise问题的末尾,您需要将输出为
    NSUserDefaults

    的相关代码放入
    名称列表
    数组作为属性,并在
    viewDidLoad

    self.namesList = [[[NSUserDefaults standardUserDefaults] objectForKey:@"namesListArray"] mutableCopy];
    
    
     if (nil == namesList) 
        {
            self.namesList = [[NSMutableArray alloc]init];
        }
    
    onSave
    方法

    [self.namesList addObject:nameTextField.text];
    [[NSUserDefaults standardUserDefaults] setObject:self.namesList forKey:@"namesListArray"];
    
    试试这个

    NSArray *nameArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"namesListArray"];
    NSMutableArray * namesList;
    if (!nameArray) {
        namesList = [[NSMutableArray alloc] init];
    } else {
        namesList = [NSMutableArray arrayWithArray:nameArray];
    
    }
    
    保存

    [namesList addObject:nameTextField.text];
    [[NSUserDefaults standardUserDefaults] setObject: namesList forKey:@"namesListArray"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    

    您希望保留旧值吗?是的,我希望保留旧值@rajesh然后每次分配数组都会删除以前的数据