2012-09-25 113 views
1

我正在使用Blackboard SDK.製作應用程序如果您可以下載SDK並查看是否有相同的錯誤,這將非常有幫助。 這裏是instructions的鏈接,以防萬一有人想跟隨 - 不要太多頁面。無法從視圖控制器手動加載xib?

的指示說

「因爲模塊的發射器應用程序中運行,該文件的MainWindow.xib是一個用於發射器。因此,該模塊可以沒有自己的MainWindow.xib文件,因爲它會創建衝突

此外,NO視圖將在模塊首次啓動時從nib文件自動加載,因此,從nib加載的所有視圖都必須在您的代碼中手動加載,並且所有nib文件都必須遵循相同的命名約定幷包含在您的資源文件中。

O我試圖實例化一個視圖控制器像這樣

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的啓動項目中包含了它應該看起來像什麼的屏幕截圖。

enter image description here

這是我目前有

enter image description here

+0

你嘗試創建一個單獨的廈門國際銀行,並加載它? – dklt

回答

3

從你對Erfan的解決方案的迴應看來,問題很簡單,LMU_LAL_ViewControllerTest.xib文件不在目標的Build階段。這意味着目標(您的程序)在構建時將永遠不會看到該文件,即使您可以在導航器中看到它。

的另一種方式,你可以添加一個XIB文件的目標是通過執行以下操作:

  • 選擇你的項目,在導航窗格
  • 頂部選擇目標,在未來的窗格導航右側
  • 開放Copy Bundle Resources:你可能不會看到LMU_LAL_ViewControllerTest.xib列在這裏,但它應該是
  • 選擇+,然後從彈出窗口中的文件,將其添加

如果這不起作用(它可能不是,因爲它相當於Erfan的解決方案),您可以嘗試從項目中刪除該文件並將其重新添加。刪除時,請確保Move to Trash。當您再次將其複製到項目中時,在出現的彈出窗口中,確保檢查Add to Targets旁邊的適當框。

如果此文件是從您的構建階段丟失,你可能會發現,其他文件也丟失,會引發類似的錯誤。您可以檢查所有構建階段,特別是針對其他資源文件的複製包資源,以及Objective-C類的實現文件的編譯源。

+0

它終於起作用了,謝謝 – Mahir

0

你不指定捆綁的事實,並不意味着它不會從一個「包」裝,它只是意味着它將從默認的應用程序包中加載。我會確保NibName中的名稱與Interface Builder中的Xib文件相匹配。

+0

我再次檢查,仍然沒有幫助 – Mahir

1

你會發現,該解釋的initWithNibName:bundle:

在其中搜索筆尖文件被捆綁的文檔。此方法首先在軟件包的語言特定項目目錄 中查找 nib文件,然後查找Resources目錄。 如果是nil,則此方法對主包中的筆尖文件看起來爲 。

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

+0

沒有錯字,雙重檢查,嘗試重命名筆尖。 – Mahir

+0

它被添加到你的包嗎? – DrummerB

+0

我該如何檢查?我可以在左邊看到它與所有其他文件,如果這就是你的意思 – Mahir

0

嘗試指定擴展名。嘗試加載@「LMU_LAL_ViewControllerTest.xib」

+0

同樣的結果,不幸 – Mahir

+0

xib文件在主目錄中? –

+0

我不確定;我在另一個項目中有一個項目,xib在內部項目 – Mahir

1

我下載您鏈接到黑板SDK,併成功添加一個視圖控制器與.xib文件到ExampleModule和從外SpringboardApplication啓動它。

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

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

    XCode Application File List

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

  3. 將腳本標記爲可執行!否則它不會運行。這可以從命令行來完成:

    使用chmod + X /path/to/your/script.sh

  4. 打開您的Springboard ApplicationBuild Phases標籤。添加一個Run Script構建階段,並參考腳本如下所示。

    XCode Application's Build Phase tab

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

如果您沒有控制SpringboadApplication,則可能無法使用XIB文件,因爲靜態庫只能包含編譯對象代碼,而不包含資源或包。如果SpringboardApplication的所有者願意與您合作,我的答案的變體或this StackOverflow question可能適合您。

下面是腳本的內容的基礎上,CocoaPods script(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` 

通知的最後一行必須進行定製,包括所有資源應用。顯然這可以使用多行來完成。

我並沒有改變視圖控制器代碼在所有它保持,因爲它是從Xcode的生成的版本。

如果你不能使這項工作在~/Blackboard Mobile SDK/Samples/Application/SpringboardApplication項目,讓我知道,如果需要的話,我會提供更多的細節。

+0

我不認爲我可以控制SpringboadApplication;他們很可能將該模塊添加到自己的啓動器 – Mahir

+0

因此,接下來的問題是他們是否會考慮採用單獨的資源包,如我提到的其他SO鏈接所述。如果沒有,那麼你最好的選擇是手動創建你的視圖,並動態地下載你需要的任何圖像。 –

+0

我從支持團隊到達了某人。我添加了他向我解釋的問題 – Mahir

1

選擇導致錯誤(LMU_LAL_ViewControllerTest.xib你的情況)的NIB文件,注意該文件檢查器,然後轉到「目標成員」一節。在那裏你會看到你的項目名稱,左邊有一個複選框。選中該框(標記爲選定)並生成&運行您的應用程序。它發生在我之前,我以這種方式解決了這個問題。你可以試試這個,讓我知道它是否對你有幫助。

+0

該框未被選中,但它不允許我對其進行更改 – Mahir

+0

應該檢查該框以加載nib文件。我認爲你的目標設置有問題。你能否重新檢查你的目標設置? – Erfan

+0

是否有任何具體的我應該尋找 – Mahir

0

請進入應用程序構建設置,並在Bundle資源中檢查.xb文件是否被添加 如果沒有添加,則廣告它。它會解決你的問題

+0

對不起,我無法在應用程序構建設置中找到Bundle資源。是否可以提供更具體的說明? – Mahir

相關問題