2012-09-25 75 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

相关问题