Iphone DidSelectRowatineXpath中的NSZombie

Iphone DidSelectRowatineXpath中的NSZombie,iphone,ios,exc-bad-access,nszombie,Iphone,Ios,Exc Bad Access,Nszombie,我有一个有趣的问题,我似乎无法找出它发生的原因,可能是我忽略了一些小问题 我有一个UITable视图,在我的DidSelectRowatinex路径中,我导航到一个新视图,然后导航到下一个视图并弹出两个视图以返回到第一个视图,然后应用程序因EXC\u BAD\u访问而崩溃 所以我用仪器和NSZombie在DidSelectRowatineXpath中找到了一个malloc,但我不知道为什么 这是我的密码: if([workflowswithdirectories count] == 0) {

我有一个有趣的问题,我似乎无法找出它发生的原因,可能是我忽略了一些小问题

我有一个UITable视图,在我的DidSelectRowatinex路径中,我导航到一个新视图,然后导航到下一个视图并弹出两个视图以返回到第一个视图,然后应用程序因EXC\u BAD\u访问而崩溃

所以我用仪器和NSZombie在DidSelectRowatineXpath中找到了一个malloc,但我不知道为什么

这是我的密码:

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];
编辑:


我忘了提到的是,在某些情况下,我会将同一类中的另一个推送到navigationcontroller上,但只有在转到WorkflowViewController,然后转到下一个viewcontroller,然后再返回两次时,才会抛出异常。为了内存和效率,请使所有UIViewController都具有强属性(带支持iVar)以保证它们能在任何有用的地方停留足够长的时间。

如果您将新的ViewController设置为强属性而不是方法iVar,该怎么办。这将保证它不会过早发布。当您尝试访问已发布的对象时,会发生错误。您应该发布一段代码片段在您用来弹出到原始视图的方法上。您提到您正在推送至少一个其他视图。可能您正在释放有问题的对象?您可以向我们展示DidSelectRowatineXpath方法吗?只需粘贴整个回溯。要了解有关错误的更多信息,请使用terminal中的malloc_历史记录。@JustinXXVII,看起来像他正在使用ARC。