Xcode NSMutableArray不填充NSUserDefaults中的数据

时间:2014-07-11 13:06:02

标签: objective-c nsmutablearray xcode5 nsuserdefaults

我在向NSMutableArray添加数据时遇到问题。我有一个tableView,我将单元格文本存储在NSMutableArray中。 tableView是用户填充的,这意味着用户输入他们想要放在tableView上的内容(制作列表等)。我遇到的问题是存储他们输入的数据。这是我的保存代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:self.tasks forKey:@"tasksArray"];
[defaults synchronize];

变量"任务"是NSMutableArray。上面的代码发生在用户按下键盘上的完成按钮并且键盘文本被添加到"任务"之后。 NSMutableArray里。这里似乎没有任何问题,因为我已经调试并发现一切都能正常保存。

在我的viewDidLoad中:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *array = [[NSArray alloc] initWithArray:[defaults objectForKey:@"tasksArray"]];

if ([self.tasks count] == 0) {

    NSLog(@"Array is 0");
    self.tasks = [[NSMutableArray alloc] init];
}

else {

    NSLog(@"Array is > 0");
    self.tasks = [[NSMutable array] alloc] initWithArray:[defaults objectForKey:@"tasksArray"]];
}

现在上面的代码是我希望将数据加载到填充tableView的数组的地方。我得到的错误是NSRangeException,索引0超出空数组的边界。问题似乎与NSMutableArray"任务"并尝试用保存的数据填充它。我的目标是完成"任务"数组填充了存储在NSUserDefaults上的数据" tasksArray"如果用户先前已输入任何数据。如果没有,并且tableView应该为空,那么我想要"任务"要创建的数组。

如果对我的代码有什么问题可以给出任何帮助,或者提供一种不同的方法来获得有用的结果。谢谢!

2 个答案:

答案 0 :(得分:0)

为什么你使用这些If else条件。只需使用

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if(!self.tasks)
    self.tasks = [[NSMutableArray alloc] initWithArray:[defaults objectForKey:@"tasksArray"]];
else
    [self.tasks addObjectsFromArray:[defaults objectForKey:@"tasksArray"]]; 

现在您可以将支票放在您想要的地方

if([self.tasks count]){
}
else{
}

答案 1 :(得分:0)

objectForKey返回一个通用对象。你知道它是一个数组,但NSMutableArray不能识别它。使用:

self.tasks = [[NSMutableArray alloc] initWithArray:(NSArray *)[defaults objectForKey:@"tasksArray"]];

{{1}}