在NSUserdefault中向数组添加项目

时间:2012-05-18 19:41:49

标签: iphone objective-c ios xcode nsuserdefaults

我是iOS开发的新手,无法找到解决此问题的方法:

我有一个有两个视图的应用程序:一个用户输入一些信息(比如一个字符串),另一个视图里面有一个包含所有输入字符串的表视图(如历史视图)。

我想要找到的是存储输入字符串的好方法,然后在用户切换到历史记录后将其加载到表视图数据源中。我尝试使用NSUserdefault但没有取得多大成功。只是弄乱了数据结构等等。

以下是我在主视图(用户输入输入字符串的位置)上所做的事情:

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];     
    NSMutableArray *arr1 = [[NSMutableArray alloc] init];
    arr1 = [defaults arrayForKey:@"historyNames"];

    [arr1 addObject:string];

    [defaults setObject:arr1 forKey:@"historyNames"];    

出于某种原因,我得到了一个警告,我在那里读到了arr1,说实话,我怀疑这应该有用。

有人可以建议我如何修改它以正常工作并实现我想要的东西吗?

感谢。

2 个答案:

答案 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];