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] 在我的
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然后每次分配数组都会删除以前的数据