2013-03-23 103 views
1

我目前正試圖在我的應用程序中實現介紹(教程)部分,我想讓用戶可以隨時查看它。我的應用程序的主要部分由UIViewController XIB文件(ViewController_iPhone.xibViewController_iPad.xib)組成,爲了介紹性視圖的目的,我發現使用Storyboards更容易。因此,在一個快速總結中:我試圖從主ViewController(XIB)切換到Storyboard中的起始ViewController,具體取決於設備類型 - >這一切都是在UIButton tap上開始的。應用程序試圖提出一個無模型視圖控制器

在我的故事板我已經分配的個人故事板的ID因此無論是iPad,iPhone或與iPhone 4英寸,它會加載正確的觀點:

故事板的ID:3-Slide1(新iPad),4-Slide1(iPhone), 5-Slide1(iPhone-4inch)。

Screenshot

這裏是ViewController.m中的按鈕代碼:

NSString *nibName; 
     if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
      nibName = @"3-Slide1"; 
     } else { 
      if ([UIScreen mainScreen].bounds.size.height == 480.0) { 
       nibName = @"4-Slide1"; 
      } else { 
       nibName = @"5-Slide1"; 
      } 
     } 

     IntroViewController *introViewController = [self.storyboard instantiateViewControllerWithIdentifier:nibName]; 

     [self presentViewController:introViewController animated:YES completion:nil]; 

的SIGABRT錯誤:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target <ViewController: 0x20865170>. 

爲什麼這個錯誤出現?我已經嘗試解決這個問題一個多小時了,但沒有取得任何進展。有人可以幫我在這裏嗎?

注意:這不是一個重複的帖子,有大量的帖子具有相同的一般SIGABRT錯誤,但都似乎有不同的問題。

+0

坑上。我剛剛讀了你的第一段。當前的視圖控制器(帶有你已經顯示的代碼的那個視圖控制器,你試圖加載這個介紹)是不是從Storyboard加載的? – 2013-03-25 13:28:44

回答

1

爲什麼會有一個從您的視圖控制器到信息視圖控制器,如果你是模態地推動segue。

我只是簡單地對視圖控制器進行單獨的細分(無論如何都會在不同的故事板文件中),命名細節並使用您的邏輯來確定正確的細分。然後使用performSegueWithIdentifier:而不是instantiateViewControllerWithIdentifier

(我猜的筆尖名字實際上指的是筆尖的文件名。不知道,但SEGUE方法是無論如何要做到這一點的正確方法。)

+0

對於這個問題,它似乎不應該有多於一個segue:iPad/iPhone通常會在不同的故事板(並且可能每個都有相同的segue名稱),而3.5英寸/ 4英寸的iPhone通常不應該不需要不同的目標控制器,只需要智能佈局代碼/約束。 – 2013-03-24 21:31:50

+0

沒錯。如果您需要簡單地調整媒體,您可以在控制器中進行... – Mundi 2013-03-24 21:42:49

相關問題