从NSUserDefaults上的UITableView保存所选项目

时间:2014-08-16 10:18:45

标签: objective-c uitableview nsuserdefaults

我有一个UITableView允许用户选择一些行。选择它们后,会出现附件复选标记。

我想知道哪个是将所选项目数组保存到NSUserDefaults的最佳方法。我以不同的方式尝试过但没有成功。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;

    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

    // I also tried adding a NSMutableArray and assigning it to NSUserDefaults, without success. Logging, nil values.
    selectedProducts = [[NSMutableArray alloc] init];
    [selectedProducts addObject:cell.textLabel.text];

    [userDefaults setObject:selectedProducts forKey:@"selectedProducts"];
    [userDefaults synchronize];

    /* The following code works, but it can only save the last object selected. 
    [userDefaults setObject:cell.textLabel.text forKey:@"selectedProducts"];
    [userDefaults synchronize];
    */

}

1 个答案:

答案 0 :(得分:1)

是因为你总是通过alloc init保存selectedProducts的新实例。

所以在viewDidLoad中使用alloc init:

selectedProducts = [NSMutableArray arrayWithArray:(NSArray *)[[NSUserDefaults   standardUserDefaults] objectForKey:@"selectedProducts"]];
if(selectedProducts == nil){
    selectedProducts = [[NSMutableArray alloc] init];
}

并在tableview中选择执行此操作

if ([selectedProducts containsObject: cell.textLabel.text] == NO) 
{
// Do something
   [selectedProducts addObject:cell.textLabel.text];
}