我在MainMenuViewController类中有一个navigationController。当我在navigationController中推送FirstViewController时,我转到我的第二个场景(FirstViewController),它没问题。但是当我想要回到根控制器(MainMenuViewController)时,我的程序在main.m中崩溃并出现错误线程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];
}
答案 0 :(得分:2)
为什么要推送recipeVC来分配firstVC。
FirstViewController *firstVC = [[FirstViewController alloc] initWithPageNum:1];
[[ProjectAppDelegate getInstance].mainVC.navigationController
pushViewController:recipeVC animated:TRUE];
答案 1 :(得分:1)
为什么要将您的app委托类命名为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];
}
答案 2 :(得分:1)
actionFirst方法中的recipeVC是什么?先检查一下.. 我在我的一个项目中也遇到过这种问题。制作firstVC是MainMenuViewController&amp;在dealloc()中释放它。 尝试一下对我有用的。