IOS: Mantendo o estado do botão no uitableviewcell

Eu tenho um problema no aplicativo do iPhone que está me incomodando há alguns dias e realmente não parece que deve ser tão difícil, então tenho certeza de que estou perdendo algo óbvio. Eu pesquisei muitas discussões no fórum sobre tópicos "semelhantes", mas nada que realmente resolva esse problema, especificament

Para ser claro, se houver alguma documentação ou outra fonte que eu deva pesquisar, aponte-me na direção certa.

Aqui vai ...

Tenho uma lista de itens que exibo para o usuário dentro de uma tabela (uitableview). A célula (célula uitableview) de cada item é personalizada e contém uma imagem e um botão Curtir (uibutton). Como esperado, para cada item da tabela, o usuário pode clicar no botão Curtir ou ignorá-lo. O botão like chama um processo separado para atualizar o servidor. Simples, certo?

Então, aqui está a questão:

Quando o botão Curtir é clicado em uma célula específica, o estado Selecionado funciona bem, mas no momento em que você desloca a célula para fora da vista, outras células aleatórias na tabela mostram o botão Gostar como Selecionado, mesmo que nunca tenham sido tocadas. Como as células são reutilizadas, por razões óbvias de desempenho, entendo por que isso pode acontecer. O que não entendo é por que minha abordagem (consulte o código abaixo) não substitui ou redefiniu o estado do botão da maneira que eu acho que deveria. Por uma questão de brevidade, estou incluindo apenas o código relevante aqui (espero que esteja formatado corretamente):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"MyCustomCell";
    MyCustomViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[MyCustomViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}

    NSString *myRating = [[self.dataArray objectAtIndex:indexPath.row] valueForKey:@"my_rating"];

    // Create the Like button
    UIButton *likeButton = [[UIButton alloc] initWithFrame:CGRectMake(260, 68, 40, 40)];
    [likeButton setImage:[UIImage imageNamed:@"thumbsUp"] forState:UIControlStateNormal];
    [likeButton setImage:[UIImage imageNamed:@"thumbsUpSelected"] forState:UIControlStateSelected];
    if (myRating == @"9") {
        [likeButton setSelected:YES];
    }
    [likeButton setTitle:@"9" forState:UIControlStateNormal];
    [likeButton setTag:indexPath.row];
    [cell.contentView addSubview:likeButton];
    [likeButton addTarget:self action:@selector(likeButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

    return cell;
}

- (void)likeButtonPressed:(UIButton *)sender {

    // Changed the Selected state on the button
    UIButton *button = (UIButton *)sender;
    button.selected = !button.selected;

    // Create a new object with the user's rating and then replace it in the dataArray
    NSString *ratingText = sender.titleLabel.text;    
    NSMutableArray *myMutableArray = [[self.dataArray objectAtIndex:row] mutableCopy];
    [myMutableArray setValue:ratingText forKey:@"my_rating"];
    [self.dataArray replaceObjectAtIndex:row withObject:myMutableArray];
}

Então, eu já passei por muitas iterações disso, mas não consigo obter o estado do botão para mostrar a imagem selecionada para os itens que são curtidos e manter a imagem normal para os itens que não foram curtidos.

Qualquer ajuda ou conselho seria muito apreciad

questionAnswers(6)

yourAnswerToTheQuestion