Программа вылетает после popToRootViewControllerAnimated

У меня есть navigationController в классе MainMenuViewController. Когда я нажимаю FirstViewController в navigationController, я перехожу ко второй сцене (FirstViewController), и все в порядке. Но когда я хочу вернуться к корневому контроллеру (MainMenuViewController), моя программа вылетает в main.m с ошибкой Thread 1: Program получила сигнал: «EXC_BAD_ACCESS». Вы можете помочь мне?

int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);  // CRASH
    [pool release]; 
    return retVal;
}

ProjectAppDelegate.h:

@interface ProjectAppDelegate: NSObject <UIApplicationDelegate> {
    UIWindow *window;
    MainMenuViewController *mainVC;
    UINavigationController *navigationController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet MainMenuViewController *mainVC;
@property (nonatomic, retain) UINavigationController *navigationController;

+(ProjectAppDelegate.h*)getInstance;
@end

ProjectAppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
    ProjectAppDelegateInstance = self;
    self.navigationController = [[UINavigationController alloc] initWithRootViewController:mainVC];
    [self.navigationController setNavigationBarHidden:TRUE];
    [self.window addSubview:self.navigationController.view];
    [self.window makeKeyAndVisible];
    return YES;
}

MainMenuViewController.m

- (IBAction)actonFirst:(id)sender 
{
    FirstViewController *firstVC = [[[FirstViewController alloc] initWithPageNum:1] autorelease];
    [[ProjectAppDelegate getInstance].mainVC.navigationController pushViewController:firstVC animated:TRUE];
}

FirstViewController.m

- (IBAction)actonHome:(id)sender 
{
    [[ProjectAppDelegate getInstance].mainVC.navigationController popToRootViewControllerAnimated:TRUE];
}

person Sveta    schedule 14.09.2011    source источник
comment
ProjectAppDelegate.h* Что это за строка?   -  person Praveen S    schedule 14.09.2011
comment
Можете ли вы опубликовать часть трассировки стека?   -  person Praveen S    schedule 14.09.2011


Ответы (3)


Почему вы нажимаете recipeVC там, где вы выделяете firstVC.

FirstViewController *firstVC = [[FirstViewController alloc] initWithPageNum:1];

[[ProjectAppDelegate getInstance].mainVC.navigationController 
pushViewController:recipeVC animated:TRUE];
person Praveen S    schedule 14.09.2011

Что такое recipeVC в методе actionFirst? сначала проверьте это. Я также столкнулся с такой проблемой в одном из моих проектов. make firstVC является свойством MainMenuViewController и отпустите его в Dealloc(). Попробуйте, это работает для меня.

person Piyush    schedule 14.09.2011

Почему вы называете свой класс делегата приложения ProjectAppDelegate.h? Удалите ".h".

@interface ProjectAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    MainMenuViewController *mainVC;
    UINavigationController *navigationController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet MainMenuViewController *mainVC;
@property (nonatomic, retain) UINavigationController *navigationController;

+(ProjectAppDelegate*)getInstance;
@end

Другой хорошей практикой кодирования является выпуск firstVc вручную, а не автоматический выпуск. Этот подход намного лучше.

- (IBAction)actonFirst:(id)sender 
{
    FirstViewController *firstVC = [[FirstViewController alloc] initWithPageNum:1];
    [[ProjectAppDelegate getInstance].mainVC.navigationController pushViewController:firstVC animated:TRUE];
    [firstVc release];
}
person visakh7    schedule 14.09.2011
comment
проверьте Dealloc вашего firstVc. Я думаю, у вас есть проблемы с выпуском объекта - person visakh7; 14.09.2011