如何在不删除现有对象的情况下将对象添加到NSMutableArray中?

时间:2014-03-11 22:42:54

标签: ios objective-c nsmutablearray nsuserdefaults

我在NSUserdefaults中遇到了我的nsmutablearray问题,每次重新启动应用程序时,这个数组会删除已存在的对象并放入新的对象,所以我需要帮助来防止这些发生,谢谢,这是我的代码;

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    if (!self.tasks) self.tasks = [NSMutableArray new];

    [self.tasks addObject:textField.text];
    [userDefaults setObject:self.tasks forKey:@"tasks"];
    //[userDefaults synchronize];
    NSLog(@"tasks:%@", [[NSUserDefaults standardUserDefaults]objectForKey:@"tasks"]);
    NSLog(@"number of tasks:%d", self.tasks.count);

我用这种方式在桌面上阅读:

cell.taskTitle.text = (self.TasksArray)[indexPath.row];

谢谢!

3 个答案:

答案 0 :(得分:4)

你在那里缺少一行代码:

self.tasks = [[NSMutableArray alloc] initWithArray:[userDefaults objectForKey:@"tasks"];

据我所知,您最初并未设置“.tasks”属性,因此添加该位可能会解决问题。

答案 1 :(得分:0)

你需要先从用户默认值中获取它,正如rmaddy建议的那样。如果之前从未创建/保存过,nil检查将创建一个新数组。

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

self.tasks = [[userDefaults objectForKey:@"tasks"] mutableCopy];

if (!self.tasks) self.tasks = [NSMutableArray new];

[self.tasks addObject:textField.text];
[userDefaults setObject:self.tasks forKey:@"tasks"];
//[userDefaults synchronize];
NSLog(@"tasks:%@", [[NSUserDefaults standardUserDefaults]objectForKey:@"tasks"]);
NSLog(@"number of tasks:%d", self.tasks.count);

答案 2 :(得分:0)

我发现你从不打电话给[[NSUserDefaults standardUserDefaults] synchronize]; 完成对象更改后,您应该调用它,因为它会将更改保存到磁盘。