gpt4 book ai didi

iphone - 如何在 Xcode 子项目中使用 InterfaceBuilder 文件?

转载 作者:行者123 更新时间:2023-12-03 20:16:37 24 4
gpt4 key购买 nike

我正在开发一个 iPhone 应用程序,它是另一个启动器的“模块”(它不会从 iPhone 主屏幕启动)。要将此模块添加到启动器,我必须将 xcode 文件放入父 xcode 项目(创建子项目)中。子项目使用 NIB 文件作为其 View Controller ,并且子项目使用 initWithNib 加载该文件:

root_view_controller = [[UINavigationController alloc] initWithRootViewController:[[LMU_IP_RootView alloc] initWithNibName:@"LMU_IP_RootView" bundle:nil]];

当我尝试运行父项目时,它崩溃了:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle [...] (loaded)' with name 'LMU_IP_RootView''

我猜测是因为它找不到 NIB 文件,因为根包现在是父项目而不是子项目。我可以将 NIB 包含在父项目中,这可以修复错误,但不能解决我的问题。

所以我的问题:如何在子项目中使用 InterfaceBuilder 文件?我必须指定 bundle 吗?如何指定引用该子项目的包?

谢谢!

最佳答案

当bundle为nil时,搜索在mainbundle中执行,而不是在子项目bundle中执行。我不完全清楚您的应用程序架构,但尝试指定包含该类的包作为要搜索的包:

NSBundle *classBundle = [NSBundle bundleForClass:[LMU_IP_RootView class]];
id vc = [[LMU_IP_RootView alloc] initWithNibName:nil bundle:classBundle]
root_view_controller = [[UINavigationController alloc]
initWithRootViewController:vc];
[vc release];

请注意,nil nib 名称默认为“ClassName.nib”,因此在这种情况下将搜索 LMU_IP_RootView.nib

通常最好在 View Controller 类中重写 -init ,以便它执行正确的查找。这样客户端代码就不必担心类需要什么 nib。

关于iphone - 如何在 Xcode 子项目中使用 InterfaceBuilder 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3858724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com