1

在此先感谢,在我的应用程序中,我正在尝试使用 tableviewdidselectrowatindexpath 方法显示第二个视图控制器。下面是我的代码,如果我不使用自动释放它可以正常工作,但是如果我使用自动释放它会给出错误,我尝试使用NSZombieEnable 来查找Error,它给出了一些关于这个 Autorelease 的错误。我在同一项目的其他类文件中使用的方法相同,但那时它工作正常。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
 {

  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
   {
    if ([[UIScreen mainScreen] bounds].size.height == 568)
    {
        CreateMessageViewController *cvc = [[[CreateMessageViewController alloc]initWithNibName:@"CreateMessageViewController"bundle:nil]autorelease];
        cvc.Username = [arrayUserName objectAtIndex:indexPath.row];
        cvc.UserId = [arrayUserID objectAtIndex:indexPath.row];
        cvc.isGroup = @"no";
        [self.navigationController pushViewController:cvc animated:YES];


    }

    else
    {

       CreateMessageViewController *cvc = [[[CreateMessageViewController alloc]initWithNibName:@"CreateMessageViewControlleriPhone4"bundle:nil]autorelease];
        cvc.Username = [arrayUserName objectAtIndex:indexPath.row];
        cvc.UserId = [arrayUserID objectAtIndex:indexPath.row];
        cvc.isGroup = @"no";
        [self.navigationController pushViewController:cvc animated:YES];

    }

}
else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
     CreateMessageViewController *cvc = [[[CreateMessageViewController alloc]initWithNibName:@"CreateMessageViewControlleriPad"bundle:nil]autorelease];
    cvc.Username = [arrayUserName objectAtIndex:indexPath.row];
    cvc.UserId = [arrayUserID objectAtIndex:indexPath.row];
    cvc.isGroup = @"no";
    [self.navigationController pushViewController:cvc animated:YES];

 }

}

我在其他类文件中使用的相同方法,但不会给出任何错误或崩溃。代码如下。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
   {
    if (StudioManger)
{

    NSLog(@"You can edit Schedule");
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    {
        if ([[UIScreen mainScreen] bounds].size.height == 568)
        {
            EditScheduleViewController *esvc = [[[EditScheduleViewController alloc]initWithNibName:@"EditScheduleViewController" bundle:Nil]autorelease];
            esvc.StudioID = myStudioID ;
            esvc.Fromtime = [arrayfromtime objectAtIndex:indexPath.row];
            esvc.Totime = [arraytotime objectAtIndex:indexPath.row];
            esvc.Date = [arraydate objectAtIndex:indexPath.row];
            esvc.Grouptype = [arraygroupname objectAtIndex:indexPath.row];
            esvc.DanceType = [arraydancetype objectAtIndex:indexPath.row];
            esvc.Day = [arrayDay objectAtIndex:indexPath.row];
            esvc.scheduleid = [arrayScheduleID objectAtIndex:indexPath.row];
            esvc.StudioName = StudioName ;
            [self.navigationController pushViewController:esvc animated:YES];

        }

        else
        {
            EditScheduleViewController *esvc = [[[EditScheduleViewController alloc]initWithNibName:@"EditScheduleViewControlleriPhone4" bundle:Nil]autorelease];
            esvc.StudioID = myStudioID ;
            esvc.Fromtime = [arrayfromtime objectAtIndex:indexPath.row];
            esvc.Totime = [arraytotime objectAtIndex:indexPath.row];
            esvc.Date = [arraydate objectAtIndex:indexPath.row];
            esvc.Grouptype = [arraygroupname objectAtIndex:indexPath.row];
            esvc.DanceType = [arraydancetype objectAtIndex:indexPath.row];
            esvc.Day = [arrayDay objectAtIndex:indexPath.row];
            esvc.scheduleid = [arrayScheduleID objectAtIndex:indexPath.row];
            esvc.StudioName = StudioName ;
            [self.navigationController pushViewController:esvc animated:YES];


        }

    }
    else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    {
        EditScheduleViewController *esvc = [[[EditScheduleViewController alloc]initWithNibName:@"EditScheduleViewControlleriPad" bundle:Nil]autorelease];
        esvc.StudioID = myStudioID ;
        esvc.Fromtime = [arrayfromtime objectAtIndex:indexPath.row];
        esvc.Totime = [arraytotime objectAtIndex:indexPath.row];
        esvc.Date = [arraydate objectAtIndex:indexPath.row];
        esvc.Grouptype = [arraygroupname objectAtIndex:indexPath.row];
        esvc.DanceType = [arraydancetype objectAtIndex:indexPath.row];
        esvc.Day = [arrayDay objectAtIndex:indexPath.row];
        esvc.scheduleid = [arrayScheduleID objectAtIndex:indexPath.row];
        esvc.StudioName = StudioName ;
        [self.navigationController pushViewController:esvc animated:YES];

      }

     }
    else
    {

    }


    }

请有人帮助我,注意,我没有使用 ARC 。并在 Xcode 5 中工作

我通过 NSZombie 得到的错误如下,

2013-10-28 17:12:34.287 Dance Program[3855:a0b] * -[AppDelegate performSelector:withObject:withObject:]: 消息发送到已释放实例 0xa077590

4

1 回答 1

0

当我最近遇到类似问题时,最适合我的是以下几点:

在 Project->Edit Active Executable -> Arguments tab -> Environment variables 部分下,我添加了以下变量并将其设置为 YES:NSAutoreleaseFreedObjectCheckEnabled、NSZombieEnabled 和 NSDebugEnabled。

在 Run 菜单下,我选择了 Enable Guard Malloc。

通过这些设置,调试器提供了更多关于我的代码有什么问题的提示。

我在这里找到了这些提示

并且还要检查这个链接ViewController respondsToSelector: message sent to deallocated instance (CRASH)

祝你好运...

于 2013-10-28T12:27:25.573 回答