Ошибка UITableView didSelectRowAtIndexPath - при повторном выборе элемента - PullRequest
1 голос
/ 02 сентября 2011

Загрузил список элементов в UITableview и смог щелкнуть и показать предупреждение для выбранной строки. Но после того, как я сказал «ок» в предупреждении, и я щелкнул по уже выбранной строке, мой код сломался, сказав «Поток 1: Программа получила сигнал: EXC_BAD_ACCESS». Пожалуйста, взгляните на код ниже.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSDictionary *playerselected = [exercises objectAtIndex:indexPath.row];
    NSString *video = [playerselected valueForKey:@"video"];

    NSString *msg = [[NSString alloc] initWithFormat:@"You have selected %@", video];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Player selected" 
                                                    message:msg 
                                                   delegate:self 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles:nil];    

    [alert show];     
    [alert release];
    [video release];
    [msg release]; 

}

Пожалуйста, подскажите, в чем здесь проблема.

1 Ответ

2 голосов
/ 02 сентября 2011

Не отпускайте video.

Когда вы извлекаете значение из NSDictionary, вы не владеете им, если только вы явно не retain.

Точнее говоря, когда вы извлекаете вашу строку, она все еще принадлежит словарю. Когда вы release делаете это, вы освобождаете объект, который вам не принадлежит, в результате чего он переизбирается. В результате он освобождается, и при следующей попытке доступа к нему память перестает работать, и ваше приложение вылетает.

...