2012-03-26 6 views
0

У меня есть интересная проблема, и я не могу понять, почему это происходит, может быть, что-то маленькое, что я пропускаю.NSZombie in didSelectRowAtIndexPath

У меня есть UITableView и в моем didselectrowatindex пути я перейти к новому взгляду, я затем перейти к следующему представлению и поп обе точки зрения, чтобы вернуться к первому, а затем сбои приложений с EXC_BAD_ACCESS

Так Я использовал инструменты и NSZombie и нашел таНос в didselectrowatindexpath, но я понятия не имею, почему

Вот мой код:

if([workflowswithdirectories count] == 0) 
{ 
    WorkflowViewController *aWorkFlow = [[WorkflowViewController alloc] init]; 
    MenuObject *obj = [workflownames objectAtIndex:[indexPath row]]; 
    aWorkFlow.heading = obj.name; 
    aWorkFlow.workId = obj.workflowid; 
    aWorkFlow.siteId = obj.siteid; 
    aWorkFlow.item = obj; 
    [self.navigationController pushViewController:aWorkFlow animated:YES]; 

} 
else if([workflownames count] == 0) 
{ 
    WorkflowListViewController *work = [[WorkflowListViewController alloc] init]; 
    work.siteId = self.siteId; 
    MenuObject *obj = [workflowswithdirectories objectAtIndex:[indexPath row]]; 
    work.menu = obj.next; 
    work.heading = obj.name; 
    [self.navigationController pushViewController:work animated:YES]; 
} 
else 
{ 
    if([indexPath section] == 0) 
    { 
     WorkflowListViewController *work = [[WorkflowListViewController alloc] init]; 
     work.siteId = self.siteId; 
     MenuObject *obj = [workflowswithdirectories objectAtIndex:[indexPath row]]; 
     work.menu = obj.next; 
     work.heading = obj.name; 
     [self.navigationController pushViewController:work animated:YES]; 
    } 
    else 
    { 
     WorkflowViewController *aWorkFlow = [[WorkflowViewController alloc] init]; 
     MenuObject *obj = [workflownames objectAtIndex:[indexPath row]]; 
     aWorkFlow.heading = obj.name; 
     aWorkFlow.workId = obj.workflowid; 
     aWorkFlow.siteId = obj.siteid; 
     aWorkFlow.item = obj; 
     [self.navigationController pushViewController:aWorkFlow animated:YES]; //Malloc is on this line 
    } 
} 
[tableView deselectRowAtIndexPath:indexPath animated:YES]; 

EDIT:

Что-то, о чем я забыл упомянуть, в некоторых случаях я нажимаю еще один из этого же класса на диспетчер навигации, но это происходит только при переходе к WorkflowViewController, а затем в следующий диспетчер представлений, а затем обратно в два раза больше, чем исключение.

+0

Что делать, если вы сделали свой новый ViewController сильным свойством вместо метода iVar. Это даст вам гарантию, что он не будет выпущен слишком рано. – CodaFi

+0

Ошибки EXC_BAD_ACCESS возникают при попытке получить доступ к уже выпущенному объекту. Вы должны опубликовать фрагмент кода для методов, которые вы используете, чтобы вернуться к исходному виду. Вы упомянули, что вы выдвигаете хотя бы один вид. Может быть, вы выпускаете этот объект? – Justin

+0

Можете ли вы показать нам метод didSelectRowAtIndexPath? Просто вставьте весь трафик. Чтобы узнать больше об ошибке, используйте malloc_history из терминала. –

ответ

0

Для обеспечения памяти и эффективности сделайте все свойства UIViewControllers сильными (с поддержкой iVar), чтобы гарантировать, что они останутся надолго для чего-нибудь полезного.