NSZombie в didSelectRowAtIndexPath - PullRequest
       23

NSZombie в didSelectRowAtIndexPath

0 голосов
/ 27 марта 2012

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

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

Поэтому я использовал инструменты и NSZombie и обнаружил malloc в 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 и затем к следующему viewcontroller, а затем дважды назад, генерируется исключение

1 Ответ

0 голосов
/ 27 марта 2012

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

...