2010-12-02 4 views
0

Привет, ребята, Я новичок в Objective-C, и я создаю приложение, и когда вы нажимаете на ячейку таблицы, он делает то, что должен, но когда вы возвращаетесь и нажимаете на ячейку, второй времени, он разбился с «EXC_BAD_ACCESS». Не могли бы вы рассказать мне, что это значит, и почему это происходит только во второй раз и как я могу это исправить? Я уверен, что это в этой функции:Почему он падает во второй раз?

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
// Navigation logic may go here. Create and push another view controller. 

    RaceData * data = [self.units objectAtIndex:indexPath.row]; 
    ProtossInfo * info = [[ProtossInfo alloc] initWithNibName:@"ProtossInfo" bundle:nil]; 

    // ... 
    // Pass the selected object to the new view controller. 
    [self.navigationController pushViewController:info animated:YES]; 

    info.title = data.titler; 
    info.minerals.text = data.min; 
    info.vespene.text = data.vesp; 
    info.supply.text = data.sup; 
    info.portrait.image = data.porty; 

    [info release]; 
    [data release]; 

} 

ответ

6

Вы выпускаете data, который вы не retain сделал.

+0

Hahaha. Благодарю. Это сработало. – Nathan 2010-12-02 05:38:58

3

Вы не должны делать:

[data release] 

... потому что «данные» не было получено с помощью Alloc, новый, сохранил и т.д. Скорее всего причина разбился 2-й раз вокруг это куча, поврежденная двойным свободным.

1

Здесь в коде, вы написали, как

RaceData * данные = [self.units objectAtIndex: indexPath.row];

Это означает, что вы передаете ссылку на этот конкретный объект в объект «данные».

, но вы пытаетесь освободить этот объект.

Таким образом, значение nil будет заменено на этот индекс в этом массиве «единиц».

Итак, когда вы нажимаете второй раз, вы получаете доступ к свойствам (например, титлер, мин и т. Д.) Из объекта nil. Но это не так. Так что он рушится.

удалить [выпуск данных]; , то он будет разрешен.

С уважением,

Сатья

Смежные вопросы