繁体   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