NSUserDefaults不会保存多行的选择

时间:2014-10-29 14:56:34

标签: ios uitableview nsuserdefaults

我有一个按钮,可以从选中切换到未选中。当用户将其更改为选中时,我希望它保存设置。重新进入tableview后,仍应选择所有先前选择的按钮,但不是。使用我的代码,我可以设置一行按钮,但如果我选择多行,则只保留最后一行。这是我尝试过的:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

// code...

    if([cell.nameLbl.text isEqualToString:[[NSUserDefaults standardUserDefaults] objectForKey:@"name"]]){
        [cell.likeBtn setSelected:YES];
    }else{
        [cell.likeBtn setSelected:NO];
    }
}

在我的TableViewCell的委托方法

-(void)tableViewCell:(TableViewCell *)cell {
//code...
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
    Car *car = self.carArray[indexPath.row];
    NSUserDefaults *userPreferences = [NSUserDefaults standardUserDefaults];
    [userPreferences setObject:car.name forKey:@"name"];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

存储多个选定行时缺少什么?

1 个答案:

答案 0 :(得分:0)

您每次都要替换与@"name"键关联的值。相反,请考虑使用NSArray作为值,并在selectdeselect委托方法中对其进行修改。例如:

// select
NSMutableArray *array = [NSMutableArray arrayWithArray:[userPreferences objectForKey:@"names"]];
[array addObject:car.name];
[userPreferences setObject:array forKey:@"names"];

// deselect
NSMutableArray *array = [NSMutableArray arrayWithArray:[userPreferences objectForKey:@"names"]];
[array removeObject:car.name];
[userPreferences setObject:array forKey:@"names"];