22 июл. 2009 г., 20:52 от Meltemi

Почему это переиздание? UINavigationController / UITableview

Я помещаю контроллер представления в стек моего контроллера навигации из метода didSelectRowAtIndexPath моего TableViewController следующим образом:

MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
MyObject *myO = (MyObject *)[appDelegate.myOs objectAtIndex:indexPath.row];
myViewController.amount = myO.amount;
[self.navigationController pushViewController:myViewController animated:YES];
[myViewController release];

Если я раскомментирую эту последнюю строку, то приложение завершится с ошибкой:

-[CALayer release]: message sent to deallocated instance 0xd4f860

Поглядывая немного дальше, я обнаружил, что падение может быть дополнительно сужено до вызова метода [super dealoc] в методе dealoc MyViewController. Откомментировав "[супер сделка]" мы не терпим крах.

У меня проблемы с дальнейшим сужением. & Quot; супер & Quot; будет классом UIViewController, и я не могу больше исследовать этот метод деалека ... могу ли я? Может быть, есть способ увидеть, на что именно указывает 0xd4f860, но я не знаю, как? Есть идеи?

Ответы на вопрос (0)

22 июл. 2009 г., 20:57 от Daniel Dickison

что myViewController выпускается (или автоматически выпускается) слишком много раз.

Код, который вы опубликовали, выглядит корректно, поэтому я посмотрю на код MyViewController, чтобы увидеть, выпускает ли он себя сам или каким-то образом заставляет себя быть выпущенным другими способами.

Вы также можете переопределить метод release, установить точку останова и посмотреть, сможете ли вы сузить ее таким образом ... например

- (void)release {
    [super release]; //Set breakpoint here
}

ВАШ ОТВЕТ НА ВОПРОС