EXC_BAD_ACCESS, хотя объекты не освобождены? - PullRequest
0 голосов
/ 03 июля 2011

У меня есть следующая проблема в моем коде:

    UITableViewController *controller = nil;


switch (indexPath.row) {
    case 0:
        controller = self.kundenTableViewController;
        break;
    case 1:
        controller = self.projekteTableViewController;
        break;
    case 2:
        controller = self.leistungenTableViewController;
        break;
    case 3:
        controller = self.zeitenTableViewController;
        break;
}

[self.navigationController pushViewController:controller animated:YES];

Все эти четыре контроллера представления правильно определены в .h-файле и синтезируются вручную (и да, все точно так же, ядважды проверено):

- (LeistungenTableViewController*)leistungenTableViewController {
if (leistungenTableViewController == nil) {
    // Neu erzeugen
    leistungenTableViewController = [[LeistungenTableViewController alloc] initWithNibName:@"LeistungenListeView" bundle:nil];
} 
return leistungenTableViewController;

}

Теперь происходит нечто странное: если вызывается case 0:, controller становится self.kundenTableViewController.Затем я получаю EXC_BAD_ACCESS в последней строке, где контроллер представления помещается в стек.Это происходит только с этим конкретным контроллером, а не с другими.Я попробовал NSZombies и проверил через NSLog, правильно ли инициализируется контроллер, но все вроде нормально.Есть идеи?

Обновление: вот код для четырех контроллеров:

- (KundenTableViewController*)kundenTableViewController {
if (kundenTableViewController == nil) {
    // Neu erzeugen
    kundenTableViewController = [[KundenTableViewController alloc] initWithNibName:@"KundenListeView" bundle:nil];
} 
return kundenTableViewController;

}

- (LeistungenTableViewController*)leistungenTableViewController {
if (leistungenTableViewController == nil) {
    // Neu erzeugen
    leistungenTableViewController = [[LeistungenTableViewController alloc] initWithNibName:@"LeistungenListeView" bundle:nil];
} 
return leistungenTableViewController;

}

- (ProjekteTableViewController*)projekteTableViewController {
if (projekteTableViewController == nil) {
    // Neu erzeugen
    projekteTableViewController = [[ProjekteTableViewController alloc] initWithNibName:@"ProjekteListeView" bundle:nil];
} 
return projekteTableViewController;

}

- (ZeitenTableViewController*)zeitenTableViewController {
if (zeitenTableViewController == nil) {
    // Neu erzeugen
    zeitenTableViewController = [[ZeitenTableViewController alloc] initWithNibName:@"ZeitenListeView" bundle:nil];
} 
return zeitenTableViewController;

}

Я просто не могу понять, почему это происходит только с первым.

1 Ответ

0 голосов
/ 03 июля 2011

Похоже, что что-то идет не так с инициализацией nib-файла, в частности, когда вызывается метод -loadView, который вызывается (это происходит непосредственно перед отображением контроллера представления и отвечает за соединение IBOutlets с прокси-объектами).Вы уверены, что каждый IBOutlet правильно подключен, а представление также связано?Вы можете проверить свои перья.

...