0

テーブルのリストがあり、ブール値でコア データに保存されています。セルを選択すると、コア データでブール値が YES に保存されます。しかし、複数のセルを選択すると、2 つのセルが YES になります。1つのセルをyesに設定したいだけです。どうやってやるの。ここに私のコードがあります:

- (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];


}
4

2 に答える 2

0

スニペットから明らかなように、選択したセルの値のみを変更していて、他のテーブルの値は変更していません。

これを実現するために、テーブル内のすべての行に対して BOOL 値を NO に設定してから、同じコード行に進むことができます。

于 2012-04-20T06:59:08.203 に答える
0

あなたは線に沿って何かをすることができます:

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"];
    }
  } 
}
于 2012-04-21T00:30:25.017 に答える