Ios NSUserDefaults不会保存多行的选择

Ios NSUserDefaults不会保存多行的选择,ios,uitableview,nsuserdefaults,Ios,Uitableview,Nsuserdefaults,我有一个按钮,可以从选中切换到未选中。当用户将其更改为“选定”时,我希望它保存设置。在重新进入tableview时,所有以前选择的按钮仍应被选择,但它们不是。使用我的代码,我可以设置一行按钮,但如果我选择多行,只有最后一行保持选中状态。以下是我尝试过的: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ // code... i

我有一个按钮,可以从选中切换到未选中。当用户将其更改为“选定”时,我希望它保存设置。在重新进入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];
}

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

每次都要替换与
@“name”
键关联的值。相反,考虑使用<代码> NSArray <代码>作为值,在<代码> >选择< /COD>和<代码>取消选择< /COD>委托方法中修改它。例如:

// 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"];

您可能已经发现您覆盖了键
@“name”
的最后一个值,因此实际上您只存储了最后一个索引,而不是一组选定的索引,因此我不会提及如此明显的事情…您真的不需要调用
synchronize
。谢谢您的建议。每次我点击:[array addObject:car.name];我收到一个错误[\uu NSCFString count]:无法识别的选择器发送到实例。我试过把car.name改成字符串。有什么想法吗?我不确定发生了什么,但它停止传递错误。现在很有魅力。