1

我正在使用Blackboard SDK 制作应用程序。如果您可以下载 SDK 并查看是否有相同的错误,这将非常有帮助。这是说明的链接,以防有人想跟随-不要太多页面。

说明说

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

此外,当模块首次启动时,不会从 nib 文件中自动加载视图。因此,从 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:to更改为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 的启动器项目中包含了它应该是什么样子的屏幕截图。

在此处输入图像描述

这是我目前拥有的

在此处输入图像描述

4

7 回答 7

3

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

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

  • 在导航器窗格的顶部选择您的项目
  • 在导航器右侧的下一个窗格中选择目标
  • open Copy Bundle Resources:您可能不会看到此处列出的 LMU_LAL_ViewControllerTest.xib,尽管它应该是
  • +从弹出窗口中选择并选择文件以添加它

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

如果您的构建阶段缺少此文件,您可能会发现其他文件也丢失了,并且会触发类似的错误。您可以检查所有构建阶段,尤其是其他资源文件的 Copy Bundle Resources 和 Objective-C 类的实现文件的 Compile Sources。

于 2012-10-08T02:53:45.567 回答
1

您可以在以下文档中找到对此的解释initWithNibName:bundle:

在其中搜索 nib 文件的包。此方法首先在包的特定语言项目目录中查找 nib 文件,然后是 Resources 目录。如果nil,此方法在主包中查找 nib 文件。

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

于 2012-09-26T00:04:35.163 回答
1

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

您需要的核心操作是将文件的编译版本.xib放入输出文件夹。我将在下面展示如何做到这一点。这是基于 CocoaPods 所做的。

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

    XCode 应用程序文件列表

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

  3. 将脚本标记为可执行!否则它不会运行。这可以从命令行完成:

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

  4. 打开Build Phases你的标签Springboard Application。添加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项目上完成这项工作,请告诉我,如果需要,我会提供更多详细信息。

于 2012-10-01T05:41:47.580 回答
1

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

于 2012-10-04T05:07:56.903 回答
0

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

于 2012-09-26T00:04:02.207 回答
0

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

于 2012-10-01T02:12:16.083 回答
0

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

于 2012-10-07T20:32:10.847 回答