Просмотр на основе NSTableView EXC_BAD_ACCESS на Lion с ARC - PullRequest
4 голосов
/ 05 августа 2011

Это странно.У меня есть очень простой проект для изучения NSTableView, и он настроен в моем nib, установленном как ViewView на основе таблицы.Я также установил dataSource и делегировал объекту контроллера.

Когда я делаю это и выполняю, я получаю EXC_BAD_ACCESS, где трассировка начинается в моей главной функции, а остальная часть стекавстроенный в Какао (поэтому не мой код).

В этом нет ничего особенного, кроме того, что этот проект использует ARC (это новый проект, так что это было по умолчанию).

Iтакже пытался использовать Analyzer, чтобы убедиться, что я нигде не управлял памятью ненадлежащим образом, и с ним не было проблем.

Я не получаю сбой, если не установил dataSource / делегат, ноочевидно, это не очень хороший способ для создания моего приложения!

Есть идеи?

Редактировать

Делегат и источник данных настроены втам жеКод выглядит следующим образом (на основе представления).Важно отметить, что я получаю сбои, независимо от того, присутствует этот код или нет, и это тот же сбой в любом случае:

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView {
    return 5;
}

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
    NSTextField *cell = [tableView makeViewWithIdentifier:@"MyView" owner:self];

    if (nil == cell) {
        cell = [[NSTextField alloc] initWithFrame:CGRectZero];


        cell.identifier = @"MyView";
    }


    [cell setStringValue:[NSString stringWithFormat:@"Row %d", row + 1]];

    return cell;
}

1 Ответ

5 голосов
/ 14 августа 2011

Все просто!

Я (несколько преднамеренно) пытался утечь переменную (потому что мне было лень создавать переменную экземпляра ... писать быстрый код здесь), но, конечно, ARC позаботился об этой утечке для меня, вызвав всю вещь взорвать.

Итак, мне просто нужно было создать свойство strong, чтобы объект, который я пытался удержать (какой объект действовал как делегат моего tableView и dataSource), не был бы выпущен преждевременно.

...