无法从视图控制器手动加载xib?

时间:2012-09-25 23:59:17

标签: iphone objective-c ios xib nsbundle

我正在使用Blackboard SDK.创建应用程序如果您可以下载SDK并查看是否有相同的错误,这将非常有用。 以下是instructions的链接,以防有人想要跟进 - 不是太多页面。

说明说

“因为模块在启动器应用程序中运行,所以MainWindow.xib文件是启动器的文件。因此,模块不能有自己的MainWindow.xib文件,因为它会产生冲突。

此外,当模块首次启动时,将从nib文件自动加载NO视图。因此,必须在代码中手动加载从nib加载的所有视图,并且所有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文件,必须   被列入发射者的项目。这意味着在   您正在运行以测试模块,启动器的项目   项目中,所有资源文件都需要包含在其中   项目。测试是否是这种情况的简单方法是找到.xib   通过在启动器中查看Xcode的左侧栏来查看文件   项目。这将确保资源文件实际上是   加入项目。我已经包含了截图   它应该在Xcode的启动器项目中看起来像。

enter image description here

这就是我目前所拥有的

enter image description here

7 个答案:

答案 0 :(得分:3)

从您对Erfan的解决方案的回复中,问题似乎只是文件LMU_LAL_ViewControllerTest.xib不在Target的Build阶段。这意味着目标(您的程序)在构建时永远不会看到该文件,即使您可以在导航器中看到它。

您可以将xib文件添加到目标的另一种方法是执行以下操作:

  • 选择导航器窗格顶部的项目
  • 在导航器右侧的下一个窗格中选择目标
  • open Copy Bundle Resources:你可能看不到这里列出的LMU_LAL_ViewControllerTest.xib,虽然它应该是
  • 选择+并从弹出窗口中选择要添加的文件

如果这不起作用(可能不是因为它等同于Erfan的解决方案),您可以尝试从项目中删除该文件并将其重新添加。当您删除时,请务必Move to Trash。当您再次将其复制到项目中时,在出现的弹出窗口中,请务必选中Add to Targets旁边的相应框。

如果Build Phases中缺少此文件,您可能会发现其他文件也丢失,并会触发类似的错误。您可以检查所有构建阶段,特别是复制捆绑资源以获取其他资源文件,并编译目标C类的实现文件的编译源。

答案 1 :(得分:1)

您可以在initWithNibName:bundle:

的文档中找到相关说明
  

要在其中搜索nib文件的包。这个方法寻找   bundle的特定于语言的项目目录中的nib文件   首先,然后是Resources目录。 如果nil,此方法会显示   对于主捆绑中的nib文件。

至于错误,您可能在xib文件的名称或代码中有拼写错误。

答案 2 :(得分:1)

我下载了您链接到的Blackboard SDK,并成功将带有.xib文件的视图控制器添加到ExampleModule,并从外部SpringboardApplication启动了它。

您需要的核心操作是.xib文件的已编译版本放入输出文件夹。我将在下面展示如何执行此操作。这是基于CocoaPods的作用。

  1. 在模块子项目中创建一个视图控制器,如下所示。

    XCode Application File List

  2. 使用下面列出的文件内容,如上所示在Springboard Application项目中创建一个shell脚本。

  3. 将脚本标记为可执行文件!否则将无法运行。这可以通过命令行完成:

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

  4. 打开Build Phases的{​​{1}}标签。添加Springboard Application构建阶段,并参考脚本,如下所示。

    XCode Application's Build Phase tab

  5. 此脚本将使用Run Script创建ibtool文件的编译版本,并将它们放入已编译的应用程序中,以便应用程序可以引用它们。

    如果您无法控制SpringboadApplication,则可能无法使用XIB文件,因为静态库只能包含编译的目标代码,而不能包含资源或包。如果SpringboardApplication的所有者愿意与您合作,我在此处或this StackOverflow question的答案的变体可能适合您。

    以下是该脚本的内容,基于CocoaPods script(MIT许可证):

    .xib

    请注意,必须自定义最后一行,以包含需要从模块进入应用程序的所有资源。显然,这可以使用多行完成。

    我根本没有改变ViewController代码 - 它保留了XCode生成的版本。

    如果您无法在#!/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` 项目中开展此工作,请与我们联系,如果需要,我会提供更多详细信息。

答案 3 :(得分:1)

选择导致错误的NIB文件(在您的情况下为LMU_LAL_ViewControllerTest.xib),注意文件检查器并转到“目标成员”部分。在那里,您将看到您的项目名称,左侧有一个复选框。选中该框(标记为已选中)并构建&amp;运行你的应用程序它发生在我之前,我已经以这种方式解决了这个问题。您可以尝试一下,让我知道它是否对您有所帮助。

答案 4 :(得分:0)

您没有指定捆绑包这一事实并不意味着它不会从“捆绑包”加载,它只是意味着它将从默认的应用程序包中加载。我会确保NibName中的名称与Interface Builder中的Xib文件匹配。

答案 5 :(得分:0)

尝试指定扩展名。尝试加载@“LMU_LAL_ViewControllerTest.xib”

答案 6 :(得分:0)

请进入应用程序构建设置并在Bundle资源中检查是否添加了.xb文件 如果没有添加,则添加它。它会解决你的问题

相关问题