簡體   English   中英

無法從視圖控制器手動加載xib?

[英]Cannot manually load xib from a view controller?

我正在使用Blackboard SDK制作應用程序 如果您可以下載SDK並查看是否存在相同的錯誤,那將非常有幫助。 這里是一個鏈接到的指令 ,如果有人想跟着一起-沒有太多的頁面。

指示說

“由於模塊在啟動器應用程序中運行,因此MainWindow.xib文件是啟動器的文件。因此,該模塊不能擁有自己的MainWindow.xib文件,因為這會產生沖突。

此外,模塊首次啟動時,不會從nib文件中自動加載任何視圖。 因此,所有從筆尖加載的視圖都必須手動加載到代碼中,並且所有筆尖文件必須遵循相同的命名約定,並包含在資源文件中。

最初,我試圖像這樣實例化視圖控制器

   testVC = [[LMU_LAL_ViewControllerTest alloc] initWithNibName:@"LMU_LAL_ViewControllerTest" bundle:nil];

但是,它導致了崩潰。 我收到的錯誤消息是

Could not load NIB in bundle: 'NSBundle </Users/mahir/Library/Application Support/iPhone Simulator/6.0/Applications/2ABAAF9D-5141-41B2-8EFB-51C3E047AD67/testLauncher.app> (loaded)' with name 'LMU_LAL_ViewControllerTest

有人說可以通過下載早期版本的xcode來解決該問題,但這還沒有幫助。 另外,我將方法從initWithNibName:bundle:更改為init並將其添加到視圖控制器子類中

- (void)loadView
{
[super loadView];

UINib *nib = [UINib nibWithNibName:@"LMU_LAL_ViewControllerTest" bundle:nil];
[nib instantiateWithOwner:self options:nil];
} 

再次,我收到類似的錯誤,但是這一次在線[nib instantiateWithOwner:self options:nil]

我究竟做錯了什么??

編輯:

這是支持團隊某人給我的摘錄。

模塊使用的所有資源,包括任何.xib文件,都必須包含在LAUNCHER的項目中。 這意味着在您實際運行的用於測試模塊的項目(啟動器項目)中,所有資源文件都必須包含在該項目內。 測試這種情況的一種簡單方法是,通過在啟動器項目中的Xcode左側欄上找到.xib文件。 這將確保資源文件實際上已包含在項目中。 我已經包含了Xcode啟動器項目中的屏幕快照。

在此處輸入圖片說明

這是我目前所擁有的

在此處輸入圖片說明

從您對Erfan解決方案的回答來看,似乎問題僅在於文件LMU_LAL_ViewControllerTest.xib不在目標的構建階段。 這意味着目標(您的程序)在構建文件時將永遠看不到該文件,即使您在導航器中也能看到它。

將xib文件添加到目標的另一種方法是執行以下操作:

  • 在“導航器”窗格頂部選擇您的項目
  • 在導航器右側的下一個窗格中選擇目標
  • 打開Copy Bundle Resources :盡管應該顯示LMU_LAL_ViewControllerTest.xib在這里,但您可能不會看到它
  • 選擇+並從彈出窗口中選擇文件以添加它

如果這不起作用(由於與Erfan的解決方案等效,因此可能不起作用),您可以嘗試從項目中刪除文件,然后再重新添加。刪除時,請確保Move to Trash 。。 當您再次將其復制到項目中時,請在出現的彈出窗口中確保選中“ Add to Targets旁邊的相應復選框。

如果在構建階段缺少此文件,則可能會發現其他文件也丟失,並且會觸發類似的錯誤。 您可以檢查所有構建階段,尤其是其他資源文件的復制捆綁包資源,以及目標C類的實現文件的編譯源。

您可以在initWithNibName:bundle:的文檔中找到相關說明initWithNibName:bundle:

在其中搜索nib文件的捆綁軟件。 該方法首先在捆綁軟件特定語言的項目目錄中查找nib文件,然后在Resources目錄中查找。 如果為nil ,則此方法在主捆綁包中查找nib文件。

對於錯誤,您可能在xib文件的名稱或代碼中有錯字。

我下載了鏈接到的Blackboard SDK,並成功將帶有.xib文件的視圖控制器添加到ExampleModule並從外部SpringboardApplication啟動了它。

您需要執行的核心操作是將.xib文件的編譯版本放入輸出文件夾中 我將在下面顯示如何執行此操作。 這基於CocoaPods的功能。

  1. 在模塊子項目中創建一個視圖控制器,如下所示。

    XCode應用程序文件列表

  2. 使用下面列出的文件內容,在您的Springboard Application項目中創建一個shell腳本,如上所示。

  3. 將腳本標記為可執行! 否則它將無法運行。 可以從命令行完成:

    chmod + x /path/to/your/script.sh

  4. 打開Springboard Application的“ Build Phases選項卡。 添加一個Run Script構建階段,並參考如下所示的腳本。

    XCode應用程序的“構建階段”選項卡

該腳本將使用ibtool來創建你的編譯版本.xib文件,並將它們放到你的編譯的應用程序,使得應用程序可以引用它們。

如果您無法控制SpringboadApplication,則可能無法使用XIB文件,因為靜態庫只能包含編譯的目標代碼,而不能包含資源或捆綁包。 如果SpringboardApplication的所有者願意與您合作,請在此處更改我的答案或此StackOverflow問題可能對您有用

這是基於CocoaPods腳本 (MIT許可證)的腳本內容:

#!/bin/sh

install_resource()
{
    case $1 in
        *.storyboard)
            echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .storyboard`.storyboardc ${SRCROOT}/$1 --sdk ${SDKROOT}"
            ibtool --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .storyboard`.storyboardc" "${SRCROOT}/$1" --sdk "${SDKROOT}"
            ;;
        *.xib)
            echo "ibtool --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xib`.nib ${SRCROOT}/$1 --sdk ${SDKROOT}"
            ibtool --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename $1 .xib`.nib" "${SRCROOT}/$1" --sdk "${SDKROOT}"
            ;;
        *)
            echo "cp -R ${SRCROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
            cp -R "${SRCROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
            ;;
    esac
}
install_resource `ls ../../Modules/ExampleModule/*.xib`

請注意,必須對最后一行進行自定義,以包括從模塊到應用程序所需的所有資源 顯然,這可以使用多行完成。

我根本沒有更改ViewController代碼-它保持了XCode生成版本中的代碼。

如果您無法在~/Blackboard Mobile SDK/Samples/Application/SpringboardApplication項目上進行此工作,請告訴我,如果需要,我將提供更多詳細信息。

選擇引起錯誤的NIB文件(在您的情況下為LMU_LAL_ViewControllerTest.xib),注意文件檢查器,然后轉到“目標成員資格”部分。 在這里,您將看到項目名稱,並在其左側有一個復選框。 選中該框(標記為選中),然后生成並運行您的應用程序。 這是我之前發生的事情,我已經通過這種方式解決了。 您可以嘗試一下,讓我知道是否有幫助。

您沒有指定捆綁包的事實,並不意味着它不會從“捆綁包”中加載,只是意味着它將從默認的應用程序捆綁包中加載。 我將確保NibName中的名稱與Interface Builder中的Xib文件匹配。

嘗試指定擴展名。 嘗試加載@“ LMU_LAL_ViewControllerTest.xib”

請進入應用程序構建設置,然后在捆綁資源中檢查是否添加了.xb文件。如果未添加,則對其進行廣告。 它將解決您的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM