2011-12-29 29 views
0

我正在創建一個基本的基於導航的應用程序,並看到一個exc_bad_access錯誤。有人可以指出我有什麼問題嗎?我剛剛2個屏幕,這裏是我使用的代碼:在AppDelegate.mios ios5 exc_bad_access與導航控制器(基本)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    UINavigationController *navcon = [[UINavigationController alloc]init]; 
    psLaunchVC* pvc = [[psLaunchVC alloc]init]; 
    [navcon pushViewController:pvc animated:NO]; 

    [self.window addSubview:navcon.view]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

psLaunchVC出現細如第一屏

。 我想從psLaunchVC啓動psTipVC。

psLaunchVC具有如

-(IBAction)showTip:(id)sender; 

在.H聲明的操作和在.M實施爲

- (IBAction) showTip:(id)sender 
{ 
    // psTipVC *pst = [[psTipVC alloc]init]; 

    psTipVC *pst = [[psTipVC alloc]initWithNibName:@"psTipVC" bundle:nil]; 

    [self.navigationController pushViewController:pst animated:YES]; 

} 

的showTip被連接在IB作爲touchUpInside動作。但是,執行此代碼時,我看到exc_bad_access錯誤。有人能幫助我嗎?是self.navigationController訪問導航控制器的正確方法?

聲明以供參考:

@interface psLaunchVC : UIViewController 
@interface psTipVC : UIViewController 

實際的錯誤消息:

2011-12-29 00:03:13.739 passport[633:707] -[__NSCFString showTip:]: 
    unrecognized selector sent to instance 0x18f5e0 
2011-12-29 00:03:13.748 passport[633:707] 
      *** Terminating app due to uncaught exception 
      'NSInvalidArgumentException', 
      reason: '-[__NSCFString showTip:]: 
      unrecognized selector sent to instance 0x18f5e0' 
+0

看起來您的錯誤與您從IB連接到showTip方法的錯誤有關,如錯誤消息'[__NCCFString showTip:]:無法識別的選擇器發送...'所示。所以我認爲這與您的導航控制器參考沒有任何關係。 – 2011-12-29 05:34:46

+0

我在工具中清楚地看到,我已建立連接..我同意它可能沒有任何關係,請參閱..但不知道還有什麼可能導致此 – Kiran 2011-12-29 06:01:39

回答

1

你要看起來像psLaunchVC已被釋放,出口指向垃圾郵件。你是否可以用ARC來編譯這個?如果是這樣,當應用程序:didFinishLaunchingWithOptions:返回時,您的導航控制器很可能會從您的下面釋放出來,因爲它不會被任何人保留。嘗試修改該方法看起來像這樣:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    psLaunchVC* pvc = [[psLaunchVC alloc]init]; 
    UINavigationController *navcon = [[UINavigationController alloc]initWithRootViewController:pvc]; 

    self.window.rootViewController = navcon; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 

UIWindow真的想要一個rootViewController,而不僅僅是要顯示的視圖。此外,initWithNibName:bundle:是UIViewControllers的指定初始化程序,psLaunchVC應該真正用它來初始化。

+0

真棒,謝謝,這是問題:自我。 window.rootViewController = navcon; – Kiran 2011-12-29 13:07:37