我正在为iPhone创建一个名称生成器应用程序,这正是我想要做的。
为了做到这一点,以下是正在发生的事情:
UILabel
。NSMutableArray
(我认为这在我的代码中无法正常工作)。 NSMutableArray
随后会保存在NSUserDefaults
。UITableView
个单元格。 我的具体问题是,我是否正确处理了此保存/持久存储过程?以下是相关代码段:
- (IBAction)saveName:(id)sender {
// save current baby name to array
NSMutableArray *babyNameArray = [[NSMutableArray alloc] init];
[babyNameArray addObject:babyname.text];
// save list of babynames to nsuserdefaults
[[NSUserDefaults standardUserDefaults] setObject:babyNameArray forKey:@"My Key"];
// for testing log names listed in nsuserdefaults
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
}
以下是整个文件内容的pastebin链接(带注释):http://pastebin.com/hQRM9Azh
答案 0 :(得分:7)
每次添加时,您都会重新开始使用空数组([[NSMutableArray alloc] init]
) - 而不是从现有项目开始。
以下是一些代码,它们会添加到现有条目中:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *babyNameArray = [[defaults stringArrayForKey:@"My Key"] mutableCopy];
if (!babyNameArray) babyNameArray = [[NSMutableArray alloc] init];
[babyNameArray addObject:babyname.text];
[defaults setObject:babyNameArray forKey:@"My Key"];
[defaults synchronize];
答案 1 :(得分:2)
在我们开始解决这个大问题之前的一些事情。首先,您需要将这些名称数组存储在文件中的某个位置,您可以在应用程序启动时或在ViewWillAppear
/ ViewWillLoad
中读取这些数据。
其次,你现在的工作方式,你一次只能保存一个名字。你分配&每次用户单击“保存名称”按钮时,都会初始化一个新的(空)数组。然后,将当前名称添加到此(空)数组,并将其设置为键“My Key”的对象。请注意,“我的密钥”对象将始终只有一个元素 - 最近保存的名称。
最后,您实际上从未将更改保存到NSUserDefaults
。如果我没记错,在您完成更改后,您需要致电synchronize
- 否则您的更改将在应用程序关闭后立即丢失。哪种杀死使用数据持久性的整个目的。 :)