我有一个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];
*/
}
答案 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];
}