Почему он падает во второй раз? - PullRequest
0 голосов
/ 02 декабря 2010

Эй, ребята, Я новичок в 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];

}  

Ответы [ 4 ]

6 голосов
/ 02 декабря 2010

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

3 голосов
/ 02 декабря 2010

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

[data release]

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

1 голос
/ 02 декабря 2010

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

RaceData * data = [self.units objectAtIndex: indexPath.row];

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

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

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

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

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

С уважением,

Сатья

0 голосов
/ 02 декабря 2010

Вы не должны выпускать данные, полученные из [self.units objectAtIndex: indexPath.row]; И, я думаю, вы должны прочитать руководство по управлению памятью Apple.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...