我正在使用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的启动器项目中看起来像。
这就是我目前所拥有的
答案 0 :(得分:3)
从您对Erfan的解决方案的回复中,问题似乎只是文件LMU_LAL_ViewControllerTest.xib不在Target的Build阶段。这意味着目标(您的程序)在构建时永远不会看到该文件,即使您可以在导航器中看到它。
您可以将xib文件添加到目标的另一种方法是执行以下操作:
Copy Bundle Resources
:你可能看不到这里列出的LMU_LAL_ViewControllerTest.xib,虽然它应该是+
并从弹出窗口中选择要添加的文件如果这不起作用(可能不是因为它等同于Erfan的解决方案),您可以尝试从项目中删除该文件并将其重新添加。当您删除时,请务必Move to Trash
。当您再次将其复制到项目中时,在出现的弹出窗口中,请务必选中Add to Targets
旁边的相应框。
如果Build Phases中缺少此文件,您可能会发现其他文件也丢失,并会触发类似的错误。您可以检查所有构建阶段,特别是复制捆绑资源以获取其他资源文件,并编译目标C类的实现文件的编译源。
答案 1 :(得分:1)
要在其中搜索nib文件的包。这个方法寻找 bundle的特定于语言的项目目录中的nib文件 首先,然后是Resources目录。 如果
nil
,此方法会显示 对于主捆绑中的nib文件。
至于错误,您可能在xib文件的名称或代码中有拼写错误。
答案 2 :(得分:1)
我下载了您链接到的Blackboard SDK,并成功将带有.xib
文件的视图控制器添加到ExampleModule
,并从外部SpringboardApplication
启动了它。
您需要的核心操作是将.xib
文件的已编译版本放入输出文件夹。我将在下面展示如何执行此操作。这是基于CocoaPods的作用。
在模块子项目中创建一个视图控制器,如下所示。
使用下面列出的文件内容,如上所示在Springboard Application
项目中创建一个shell脚本。
将脚本标记为可执行文件!否则将无法运行。这可以通过命令行完成:
chmod + x /path/to/your/script.sh
打开Build Phases
的{{1}}标签。添加Springboard Application
构建阶段,并参考脚本,如下所示。
此脚本将使用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文件 如果没有添加,则添加它。它会解决你的问题