2012-01-01 50 views
38

我幾天前開始了一個新應用程序,並開始使用模擬器來測試它。我從一個空的項目開始,手動添加故事板。模擬器建立並運行我的應用程序很好,但是當我嘗試構建到我的iPhone時,我得到的消息'找不到在捆綁NSBundle'名爲'MainStoryBoard'的故事板。無法在捆綁包中找到名爲'MainStoryBoard'的故事板NSBundle

谷歌什麼也沒有提出,this question建議我檢查了我的故事板的目標,但一切都已到位。即便如此,如果某些東西不存在,模擬器也不會運行。

任何人都可以指向正確的方向嗎?

+5

檢查您的構建階段,看看你的故事板是上述方案一copybundleresource – CodaFi 2012-01-01 20:08:06

回答

33

模擬器不區分大小寫,但設備是。如果您的故事板被稱爲MainStoryboard,而不是MainStoryBoard,則會導致您的問題。

+0

是100%正確的。 但是,如果您爲應用使用多個故事板,那麼最好將故事板名稱留爲.plist中的空白.....希望我有幫助。 – 2013-10-22 12:01:21

75

我有我的應用程序在iPhone模擬器上正常工作,但奇怪的Xcode停止響應,我不得不強制退出Xcode。當我重新啓動的Xcode我遇到「無法找到名爲MainStoryboard ....故事板」

我已經按照以下步驟修復了這個問題,:

  1. 重命名「MainStoryboard.storyboard」到「MainStoryboard_1。故事板「
  2. 打開位於」支持文件「文件夾中的文件」$ your_app $ -Info.plist「。將「主要故事板文件基本名稱」編輯爲「MainStoryboard_1.storyboard」。
  3. 重新運行應用程序,它爲我工作。
  4. 我將故事板文件重命名爲原始的「MainStoryboard.storyboard」。
  5. 將.plist文件編輯回原來的位置。
  6. 重新運行應用程序,它爲我工作。

出於某種原因,強制退出Xcode後無法識別文件「MainStoryboard.storyboard」,並按照上述步驟使應用程序再次識別該文件。

希望這個解決方案能夠幫助..

+1

這對我有用,謝謝你讓我的頭髮脫落。 – D3vtr0n 2012-07-30 20:02:00

+2

我更改.plist文件並保存,並將其更改回來,這對我沒有任何影響。然後,我重新命名.storyboard文件並將其重新命名並從此開始工作。 – 2012-08-08 13:04:59

+0

也爲我工作,謝謝!只是一個FYI,我從來沒有關閉XCode,但按照步驟,它的工作(所以你不需要打開和關閉XCode) – 2014-01-31 23:27:01

0

我有類似的問題,我得到了下面的錯誤。

 
exception 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'MainStoryboard_iPhone' in bundle NSBundle 

我通過更新plist文件來修復它。只需轉到編輯 - >查找 - >在工作區中查找並搜索「故事」。現在更新故事板的適當名稱。

2

轉到您的項目,選擇您的目標並從菜單中拉下來重新選擇您的故事板。

此外,你可以更新你的plist,我發現改變一個沒有改變其他。

0

如果您最近將您的iOS SIM重置爲默認設置,那麼在其首選項中檢查區域設置也很有用。我正在使用俄語作爲唯一的語言環境來處理應用程序,並且在sim重置xCode後停止啓動應用程序,因爲sim語言環境設置爲英語。

0

我在設備上添加了大約150個字體到UIAppFonts時出現此錯誤。
當我將他們的人數減少到100人後,它就消失了。

1

爲了防止發生這種情況,我不得不改變我使用故事板文件的方式。編輯故事板後保存文件,然後退出XCode。這似乎可以防止問題的發生。

1

我有這個問題,當我不小心打開一個項目與第二次安裝的Xcode。它永久打破了我的項目文件(這是可以理解的)。碰巧我

1

這個問題,當我打電話情節串連圖板在code.The原因是我用不同的「字」爲storyboard.I解決它像這樣

轉到目標 - >信息,選擇信息,複製名稱的故事板並將其粘貼到你正在調用故事板的地方。

至少試一試......。

8

當您取消選擇「使用基本國際化」並在不同的語言環境而不是您特定的本地化環境中運行模擬器時,會出現該問題。

例如,您在項目設置中指定zh-CN本地化,但在en-US下運行模擬器。

+0

你救了我的一天:D – AmiiQo 2014-08-23 17:42:34

21

只想提一下我遇到的場景。我不知道如何,但故事板與目標斷開,但它仍然是項目的一部分。爲了解決這個問題,我打開了故事板,選擇了「文件檢查器」(右側面板最左側的圖標),並在「目標成員」下檢查項目。 希望它可以幫助別人。

+0

令我驚訝的是,事情如何從根本上變得無法控制!謝謝!這解決了我的問題! – 2015-01-29 22:19:23

1

這發生在我身上的時候,我在模擬器上安裝了一個具有相同名稱的應用程序。

我已經刪除了以前的應用程序,在「部署信息」中重新選擇了故事板,重新運行應用程序,並且一切正常。

4

我以爲你可能已經刪除了故事板,並決定在最初的應用程序啓動時使用.xib文件。在這種情況下,Xcode會試圖找到一個不存在的故事板。

對於這種情況,點擊項目>Info>Custom iOS Target Properties並刪除這個鍵值對: Main storyboard file base name

+0

實際上,* UIStoryboard storyboardWithName *方法的值正是在那裏是Main。總結: [UIStoryboard storyboardWithName:@「Main」bundle:nil] – OhadM 2015-07-20 12:41:35

0

我曾在一個項目,有有和沒有〜iPad和〜iPhone後綴故事板這個問題,像MainStoryboard.storyboard和MainStoryboard〜iPad.storyboard。

問題是,當MainStoryboard.storyboard被編譯到build目錄中時,它覆蓋了MainStoryboard〜iPad.storyboard。如果這些文件按照相反的順序編譯,那麼這兩個文件都將保留而沒有問題。我不知道爲什麼會發生這種情況。

爲了解決這個問題,您可以停止使用〜iPad/iPhone後綴或確保文件在複製包資源階段按照正確的順序。

(使用XCode6.2beta2)

0

一件很無聊的人,但我有「MainStoryboard.storyboard」在「主要故事板文件基本名稱(新iPad)」進入我的我的.plist的,而不是僅僅「 MainStoryboard」。

3

一個簡單的清理糾正了我的錯誤。

+1

:)太棒了。更正了我。 – Mehmet 2015-07-08 07:05:51

+0

爲我工作以及 – jward01 2016-07-18 00:37:07

0

我的解決方案是,我只需要將MainStoryboard添加到Bundle Resources。之後,它工作正常。

項目 - >構建階段 - >複製束資源 - >點擊+按鈕並添加您的文件。

0

轉到您的info.plist在構建階段>複製包資源,並使用圖標添加你的故事板「+」

2

如果你正在使用源代碼的導航,嘗試使用下面的代碼

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle: nil]; 

通常人們會爲該名稱輸入「Main.storyboard」,因爲這實際上是該文件的名稱,但出於Obj-C編碼的目的,「X.storyboard」的名稱爲「X」,所以在這種情況下,@「主」。

1

你只需要檢查你的配置文件(.plistSupporting files文件夾

檢查您的默認故事板的名下。

4

幫我(雨燕2.1,Xcode的7.2),爲應用與標籤欄

let storyboard: UIStoryboard = UIStoryboard(name:"Main",bundle: NSBundle(forClass: self.dynamicType)) 
    let tabController = storyboard.instantiateViewControllerWithIdentifier("MyTabBarIdentifier") as! UITabBarController 

我有Main.storyboard使用正確的目標會員,複製捆綁資源,清理build文件夾等(大部分答案都指向這個)。

+0

這幫了我 - 我發佈[另一個答案](http://stackoverflow.com/a/37821004/2544629),以顯示它如何幫助。謝謝! – manroe 2016-06-14 19:58:20

3

Nitin Alabur的回答幫助了我,但間接地。發佈另一個答案澄清:

我正在構建一個動態框架,裏面有一個故事板,並且在構建測試框架的測試應用程序中,出現此錯誤。

我的代碼是這樣的:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:nil]; 

我忽略了NSBundle的東西,因爲,嘿嘿,我不知道包是什麼赫克。原來,對於這個用例來說非常重要,故事板將在應用程序的「包」之外存在(而不是在我的框架的包中)。此代碼會告訴iOS的發現,目前的類存在(這對我來說,是一個包含我的框架包)捆綁包中的情節提要:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyStoryboard" bundle:[NSBundle bundleForClass:[self class]]]; 
+0

謝謝!它爲我工作。 – Vinner 2016-10-07 06:52:34

4

嘗試了上述提到的所有解決方案,但沒有奏效。

深入研究後發現,罪魁禍首:

複製包資源從缺少具體目標 - >構建階段

這同時去除的CocoaPods得到意外刪除。

下面是步驟來解決這個問題:

  1. 轉到您的項目TARGETS
  2. 點擊plus (+) button出現在左上角
  3. 選擇新的複製包從下拉資源下降
  4. 現在,加你Storyboard files (Main, Launchscreen etc).同時添加資產文件夾。 可以通過單擊在加(+)按鈕存在於底部
添加這些文件

screenshot

  • 刪除從模擬器/設備和運行的derived data content
  • Delete the app再次
  • 1

    我也有同樣的問題,是什麼導致這種類型的異常是我寫了「Main.storyboard」而不是「主」。我們不必指定.storyboard擴展名。

    0

    就我而言,這是Mac應用程序框架內的故事板。我用的是:

    let storyboard = NSStoryboard(name: "StoryboardName", bundle: nil) 
    

    ,並使用該框架的包標識符需要得到正確的包:

    let storyboard = NSStoryboard(name: "StoryboardName", 
              bundle: Bundle(identifier: "com.company.FrameworkName")) 
    
    0

    有兩種可能性,

    1. 確保你的故事板被添加到你的目標。

    Select Storyboard > Go to file inspector (first right tab) > Check Target Membership

    enter image description here

  • 初始化故事板具有適當bundle

    • 如果故事板是在同一個目標,你正在處理然後用bundle = nil
    • 如果故事板是在不同的目標比您正在使用,然後嘗試下面的代碼初始化包和故事板。

      let bundle = Bundle(for: MyClass.self) 
      let storyboard = UIStoryboard(name: "Main", bundle: bundle) 
      
  • 相關問題