0

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

我有一个应用程序,它有两个视图:一个是用户输入一些信息(比如一个字符串)的视图,另一个是一个包含所有曾经输入过的字符串的 tableview 视图(比如历史视图)。

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

这是我在主视图上所做的(用户输入输入字符串的地方):

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

    [arr1 addObject:string];

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

出于某种原因,我在阅读 arr1 时收到了警告,老实说,我怀疑这是否应该起作用。

谁能建议我如何修改它以使其正常工作并实现我正在寻找的东西?

谢谢。

4

2 回答 2

7
[defaults arrayForKey:@"historyNames"];

如果您从未在 NSUSerDefaults 中为该键初始化和保存数组,则将返回 nil。

如果您初始化和数组并设置一次(查看如何初始化 NSUserDefaults 的默认值),它将返回一个正确的数组。

然后你可以做

NSMutableArray *arr1  = [NSMutableArray arrayWithArray:[[defaults arrayForKey@"historyNames"]];

根据这个数组有多少元素,你最好使用 Core Data。对于许多/较大的值,使用用户默认值不是很有效,只是对于小设置和类似的东西。

于 2012-05-18T19:58:41.253 回答
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];
于 2012-05-18T19:53:43.867 回答