gpt4 book ai didi

ios - 如何在框架内加载 `.xib`/`.nib` 文件?

转载 作者:行者123 更新时间:2023-11-28 23:29:51 25 4
gpt4 key购买 nike

我正在将 iOS 库作为 Cocoa Pod。在这个库中,我有一个自定义 View :

@interface PlayerView : UIView

@property (strong, nonatomic) IBOutlet UIView *contentView;

@end
@implementation PlayerView

- (instancetype) initWithCoder:(NSCoder*)coder
{
self = [super initWithCoder:coder];
[self initialize];
return self;
}

- (instancetype) initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
[self initialize];
return self;
}

- (void)initialize
{
[[NSBundle mainBundle] loadNibNamed:@"PlayerView" owner:self options:nil];
[self addSubview:contentView];
}

@end

在这种情况下,contentView.xib 中定义的整个 View ,其中包括图像和一个标签。

当我构建我的演示应用程序(和库)时,该应用程序运行,但是当需要显示此 View 时,我收到以下错误:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/stevenbarnett/Library/Developer/CoreSimulator/Devices/EC244A5F-CE57-4CCD-9BB4-CDC834D74812/data/Containers/Bundle/Application/446EB609-B663-4BD5-8F8D-F22D03BC0B18/bfsdk_Example.app> (loaded)' with name 'PlayerView''

手动检查.app文件,可以发现PlayerView.nib文件隐藏在Frameworks/bfsdk.framework目录下,但我猜因为它不在根目录中,所以它没有被定位:

enter image description here enter image description here

我已经验证:

  • 文件所有者设置为 PlayerView
  • PlayerView.xib 添加到“复制捆绑资源”构建阶段

在运行仅包含的应用程序时,如何从我的库中的类加载我的库中的.xib文件我的库作为 .framework?

我相信如果我手动指定文件的路径,我可以让它工作:

NSString* resourcePath = [[NSBundle mainBundle] pathForResource:@"bfsdk" ofType:@"framework"];
[[NSBundle mainBundle] loadNibNamed:[resourcePath stringByAppendingPathComponent:@"PlayerView"]];

但是我不喜欢这样,我将框架的名称硬编码到我的一个类中。如果我在一年内更改名称,我不希望因为这一行无人记得存在的埋藏代码而破坏一切。

最佳答案

应该够用了

[NSBundle bundleForClass:[自身类]]代替[NSBundle mainBundle]

所以基本上 [NSBundle mainBundle] 返回当前模块(即您的应用程序)的包,但不是实际的框架

在这里您可以找到更多详细信息 [NSBundle bundleForClass:[self class]]] what does that mean?

关于ios - 如何在框架内加载 `.xib`/`.nib` 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57013152/

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