在 NSuserdefaults 中保存选定的检查表行

Posted

技术标签:

【中文标题】在 NSuserdefaults 中保存选定的检查表行【英文标题】:save selected cheklist rows in NSuserdefaults 【发布时间】:2011-06-19 09:01:42 【问题描述】:

我对 Iphone 还很陌生,这是我项目中的最后一个模块。以下代码非常适合使用 chekmark 选择多个国家/地区。 基本上我的问题是如何保存这些选定的国家并在返回此视图时再次显示复选标记。 请在这里帮助我..

我的 didSelectRowAtIndexPath 方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
 UITableViewCell *selectedCell = [tableView cellForRowAtIndexPath:indexPath];

  if([selectedCell accessoryType] == UITableViewCellAccessoryNone) 
  
    [selectedCell setAccessoryType:UITableViewCellAccessoryCheckmark];
    [selectedIndexes addObject:[NSNumber numberWithInt:indexPath.row]];
  
  else
  
    [selectedCell setAccessoryType:UITableViewCellAccessoryNone];
    [selectedIndexes removeObject:[NSNumber numberWithInt:indexPath.row]];
  

  [tableView deselectRowAtIndexPath:indexPath animated:NO];
  [tableView reloadData];

我的 cellForRowAtIndexPath 方法

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

    HolidayAppDelegate *delegatObj = (HolidayAppDelegate *)[UIApplication sharedApplication].delegate;

    static NSString *CellIdentifier = @"CustomCell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) 
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    

    cell.textLabel.text=[delegatObj.allcountryarray objectAtIndex:indexPath.row];

    [cell setAccessoryType:UITableViewCellAccessoryNone];

    for (int i = 0; i < selectedIndexes.count; i++) 
    
        NSUInteger num = [[selectedIndexes objectAtIndex:i] intValue];
        if (num == indexPath.row) 
            [cell setAccessoryType:UITableViewCellAccessoryCheckmark];
            break;
        
    

    return cell;

谢谢

【问题讨论】:

【参考方案1】:

如果你的数据不是很大,你可以使用 NSUserDefaults。

保存数据:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

[userDefaults setObject: selectedIndexes forKey:@"selection"];

[用户默认同步];

获取数据:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

[userDefaults objectForKey:@"selection"]

【讨论】:

【参考方案2】:

有很多方法可以解决它--

根据我的说法,您必须创建一个 NSMutableArrayarray.cout 与您的 Country array 相同,最初您将 default value 存储在您的 array 中, 在didSelectRowAtIndexPath 中,您必须根据UITableViewCellAccessoryCheckmark 更改存储的default value

然后你必须将NSMutableArray 存储在NSUserDefaults -

Link - FOR SAVE ARRAY IN NSUserDefaults

【讨论】:

以上是关于在 NSuserdefaults 中保存选定的检查表行的主要内容,如果未能解决你的问题,请参考以下文章

通过加载 NSUserDefaults 检查多行

Xcode:检查 UIButton 是不是隐藏,使用 NSUserDefaults

保存在 UIPicker 中选择的值的最佳方法?

NSUserDefaults:保存的数字始终为 0,iPhone

显示带有选定行的 UIPickerView

使用 NSUserDefaults 持续保持 UITableView 选定单元格的 UIAccessoryType