Программа вылетает после popToRootViewControllerAnimated - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть навигационный контроллер в классе MainMenuViewController.Когда я нажимаю FirstViewController в navigationController, я перехожу ко второй сцене (FirstViewController), и все в порядке.Но когда я хочу вернуться к корневому контроллеру (MainMenuViewController), моя программа вылетает в main.m с ошибкой Thread 1: Программа получила сигнал: "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];
}

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

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

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

[[ProjectAppDelegate getInstance].mainVC.navigationController 
pushViewController:recipeVC animated:TRUE];
1 голос
/ 14 сентября 2011

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

1 голос
/ 14 сентября 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

Еще одна хорошая практика кодирования - выпускать первый VC вручную, а не переходить на автоматический выпуск. Этот подход намного лучше.

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