视图控制器包含:
的UITextField (名称)。
的UIButton (保存)。
输入任何名称并点击“保存”后,该名称将添加到使用NSUserDefaults
存储的数组中。
此视图控制器是从另一个视图控制器推送的,所以当我回到此视图控制器时,NSArray
的内容会被我可能指定的新名称覆盖。我不确定是什么造成这种情况,但我怀疑它必须对allocation
和initialization
的{{1}}做些什么。
在我的ViewDidLoad中,我做了NSArray
在我的NSMutableArray *namesList= [[NSMutableArray alloc]init];
方法中,
OnSave
编辑: 相关视图控制器的屏幕截图:
在这里,当我点击[namesList addObject:nameTextField.text];
[[NSUserDefaults standardUserDefaults] setObject:namesList forKey:@"namesListArray"];
NSLog(@"items in array: %@",namesArray);
按钮时,会推送第二个视图控制器。
当我输入“kenneth”并点击“保存”时,控制台会说:
ADD
现在,在没有回到上一个View Controller的情况下,当我输入另一个名字时,说“john”并点击“保存”,控制台会说:
2014-03-03 11:03:46.219 SmartWatch[664:a0b] items in array: (
kenneth)
直到现在一切都很好。 当我回到上一个控制器并返回到第二个View Controller时,会出现问题。现在,当我键入另一个名称时,说“scott”,控制台说:
2014-03-03 11:15:43.646 SmartWatch[664:a0b] items in array: (
kenneth,
john)
这意味着前两个名称被覆盖。我希望数组也保留“kenneth”和“john”,并且“scott”实际上应该附加到数组中。
我认为这是因为当第二个View Controller再次出现在前台时,数组会被初始化,但我不确定它,我不知道如何纠正这个问题。
希望现在问题很明确。谢谢!
答案 0 :(得分:2)
试试这个,
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];
答案 1 :(得分:1)
将nameList
数组作为属性并放在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"];
答案 2 :(得分:0)
您是否在 ViewWillAppear 方法中执行将元素存储到nsarray的任何功能。
如果没有,请正确指定您的代码以提供帮助!
答案 3 :(得分:0)
在NSUserDefaults.
结尾处添加[[NSUserDefaults standardUserDefaults] synchronize];
其他明智的问题是,在哪里,您需要将相关代码放在NSUserDefaults
的输出中。