如何选择一个 TableViewCell 并将所有其他单元格设置为 CoreData 中的布尔值 NO?

Posted

技术标签:

【中文标题】如何选择一个 TableViewCell 并将所有其他单元格设置为 CoreData 中的布尔值 NO?【英文标题】:how to select one TableViewCell and set all the other Cells to the Bool Value NO in CoreData? 【发布时间】:2012-04-20 06:41:51 【问题描述】:

我有一个表格列表,用布尔值保存在核心数据中,当我选择一个单元格时,布尔值在核心数据中保存为“是”。但是当我选择一个多于一个单元格时,有 2 个单元格为“是”。我只想将 1 个单元格设置为是。我怎样才能做到这一点。 这是我的代码:

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

    BestuhlungCell *cell =(BestuhlungCell *)[tableView dequeueReusableCellWithIdentifier:@"Cell"];


    NSManagedObject *managedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.bestuhlungLabel.text = [managedObject valueForKey:@"bestuhlungstitel"];
    NSData *data = [[NSData alloc] initWithData:[managedObject valueForKey:@"bestuhlungsfoto"]];
    UIImage *image = [UIImage imageWithData:data];
    cell.bestuhlungFoto.image = image;
    cell.checkButton.hidden=YES;


    return cell;




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




    NSManagedObjectContext *context = [app managedObjectContext];
  //  BestuhlungCell *cell = (BestuhlungCell *)[tableView cellForRowAtIndexPath:indexPath];
    Bestuhlung *bestuhlung=[self.fetchedResultsController objectAtIndexPath:indexPath];







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

     else 

        [bestuhlung setValue:[NSNumber numberWithBool:YES] forKey:@"check"];

    


    NSError *error = nil;
    if (![context save:&error]) 

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    



    [self.navigationController popViewControllerAnimated:YES];



【问题讨论】:

【参考方案1】:

你可以这样做:

NSArray *sections = self.fetchedResultsController.sections;
for(NSFetchedResultsSectionInfo *sectionInfo in sections) 
  for(Bestuhlung *currentBestuhlung in sectionInfo.objects 
    if(currentBestuhlung == bestuhlung) 
      // the selected bestuhlung
      if ([[bestuhlung valueForKey:@"check"] boolValue]) 
        [bestuhlung setValue:[NSNumber numberWithBool:NO] forKey:@"check"];
      else 
        [bestuhlung setValue:[NSNumber numberWithBool:YES] forKey:@"check"];
    
    else 
      // those are the other ones you want to uncheck
      [currentBestuhlung setValue:[NSNumber numberWithBool:NO] forKey:@"check"];
    
   

【讨论】:

它有效,我只需将您的第二行更正为:for(id sectionInfo in section) ..我的错,只是把它写在我的头上:-) 我发现了一个错误。当我选择一个单元格并返回我的主视图时,另一个视图中的其他单元格意外地选择了一个单元格。我不知道为什么【参考方案2】:

从您的 sn-p 中可以清楚地看出,您只是在修改选定单元格的值,而不是其他表值。

为了实现这一点,您已将表中每一行的 BOOL 值设置为 NO,然后您可以继续使用同一行代码。

【讨论】:

以上是关于如何选择一个 TableViewCell 并将所有其他单元格设置为 CoreData 中的布尔值 NO?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 tableviewcell 中显示选定的日期(在日历中)

如何在swift3中将每个tableViewcell数据发送到collectionview

选择 tableviewcell 时如何运行函数(例如,按下单元格时更新 UIImageView)

解析和斯威夫特。从 Parse 关系中设置 tableViewCell 附件类型

Tableviewcell 数据不会转换到另一个视图控制器

如何在 Swift 3.0 中选择 JSON 输出到 TableViewCell 中?