我是iOS开发的新手,无法找到解决此问题的方法:
我有一个有两个视图的应用程序:一个用户输入一些信息(比如一个字符串),另一个视图里面有一个包含所有输入字符串的表视图(如历史视图)。
我想要找到的是存储输入字符串的好方法,然后在用户切换到历史记录后将其加载到表视图数据源中。我尝试使用NSUserdefault但没有取得多大成功。只是弄乱了数据结构等等。
以下是我在主视图(用户输入输入字符串的位置)上所做的事情:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *arr1 = [[NSMutableArray alloc] init];
arr1 = [defaults arrayForKey:@"historyNames"];
[arr1 addObject:string];
[defaults setObject:arr1 forKey:@"historyNames"];
出于某种原因,我得到了一个警告,我在那里读到了arr1,说实话,我怀疑这应该有用。
有人可以建议我如何修改它以正常工作并实现我想要的东西吗?
感谢。
答案 0 :(得分:7)
[defaults arrayForKey:@"historyNames"];
如果您从未在NSUSerDefaults中初始化并保存该键的数组,则返回nil。
如果初始化和数组并设置一次(查找如何初始化NSUserDefaults的默认值),它将返回一个正确的数组。
然后你可以做
NSMutableArray *arr1 = [NSMutableArray arrayWithArray:[[defaults arrayForKey@"historyNames"]];
根据此阵列的元素数量,您可能最好使用Core Data。对于许多/大值,使用用户默认值效率不高,仅适用于小型设置等。
答案 1 :(得分:0)
当您的应用程序启动时,请查看用户默认值,以查看您上次使用它时是否已有数组对象。如果没有,请为arr1调用alloc和init。 (如果您从默认设置访问它,则不想调用它。)
NSMutableArray * arr1;
arr1 = (NSMutableArray *) [defaults objectForKey:@"historyNames"];
if (!arr1) {
arr1 = [[NSMutableArray alloc] initWithCapacity:20];
}
在主视图中,只需添加输入字符串,然后保存默认值。
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject: arr1 forKey: @"historyNames"];
[prefs synchronize];