无论如何用数组填充 UITableView 但保留复选标记?

Posted

技术标签:

【中文标题】无论如何用数组填充 UITableView 但保留复选标记?【英文标题】:Is there anyway to populate a UITableView with an array but persist checkmarks? 【发布时间】:2010-02-15 04:07:45 【问题描述】:

我有一个带有标签栏的应用,每个标签都包含一个单独的表格。第一个表使用核心数据来保存其条目和复选标记。第二个选项卡上的第二个表使用 NSMutableArray 来填充它(我会使用核心数据,但我必须预先填充它,而这个表不允许这样做)我想以与第一个相同的方式保留复选标记包含核心数据的表,但有问题。代码如下所示:

 -(void)viewDidLoad 
    [super viewDidLoad];
airport = [[NSMutableArray alloc] init];
[airport addObject:@"Passport"];

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
return 1;



// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
return [airport count];



// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath        *)indexPath 

static NSString *CellIdentifier = @"Cell";

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


// Set up the cell...
NSString *cellValue = [airport objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;
//[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];


NSManagedObject *item = [[self fetchedResultsController] objectAtIndexPath:indexPath];
cell.textLabel.text = [item valueForKey:@"name"]; //CHANGED TO DETAIL


if ([[item valueForKey:@"check"] boolValue]) 
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
 else 
    cell.accessoryType = UITableViewCellAccessoryNone;


cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;

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


NSManagedObject *selectedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];


if ([[selectedObject valueForKey:@"check"] boolValue]) 
    [selectedObject setValue:[NSNumber numberWithBool:NO] forKey:@"check"];
 else 
    [selectedObject setValue:[NSNumber numberWithBool:YES] forKey:@"check"];


UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath]; 
if (thisCell.accessoryType == UITableViewCellAccessoryNone) 
    thisCell.accessoryType = UITableViewCellAccessoryCheckmark;  
 else 
    thisCell.accessoryType = UITableViewCellAccessoryNone;
 
[tableView deselectRowAtIndexPath:indexPath animated:NO];       

我相信这行 cell.textLabel.text = [item valueForKey@"name"]; 是什么原因造成的。我想要做的就是从数组中填充表格并保留复选标记。任何帮助是极大的赞赏。提前致谢。

【问题讨论】:

【参考方案1】:

这一行正在替换单元格文本:

cell.textLabel.text = [item valueForKey:@"name"];

最初由这些行分配:

NSString *cellValue = [airport objectAtIndex:indexPath.row];
cell.textLabel.text = cellValue;

为什么要使用“item”的“name”属性?

【讨论】:

名称是名为“Hero”的实体中的一个属性 这就是我的第一个表的工作方式,它在加载时检查名称是否有复选标记。有什么方法可以保留一个带有数组或预加载列表的复选标记? 有很多方法可以做你想做的事,包括使用 Core Data。我会使用 Core Data,因为您已经在使用它,但如果您愿意,您可以使用属性列表 (plist) 保存检查过的数据数组。 如何使用 plist 来保留复选标记?数组会代替 plist 消失吗? plist 是一种文件类型。您可以使用writeToFile:atomically: 将数组作为plist 写入存储(并使用initWithContentsOfFile: 读取它)。假设它是被标记为“已检查”的 Core Data 托管对象,您可能希望存储“已检查”对象的 objectID 属性数组(确保首先保存所有对象)。不过,为什么不使用 Core Data 呢? 根据我对核心数据的经验,它不能预先填充。我曾经使用 Apple Developer Tech 支持核心数据,但被告知它不是。到目前为止,我只是想写信给 NSUserDefaults,因为这只是检查持久性。完整的代码可以在这里看到。我仍然不知道是什么让它这次崩溃了。 ***.com/questions/2267579/…我添加这个问题只是为了让人们可以看到更改后的代码。

以上是关于无论如何用数组填充 UITableView 但保留复选标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何用两个查询填充一个 UITableView?

如何用字典中的分组结构中的数据填充UITableView?

python如何用零填充numpy数组

如何用前导零填充数组?

如何用空对象填充字符串数组?

如何用零填充数组?