gpt4 book ai didi

ios - 为 iPhone 5 加载不同的 xib 失败

转载 作者:行者123 更新时间:2023-11-28 20:17:38 26 4
gpt4 key购买 nike

我正在尝试让我的应用检测用户是否在 iPhone 5 屏幕上。

我在其他 View 中成功使用了以下方法。

通过一个按钮我调用要加载的 Xib/ View

- (IBAction)DemoTapeTwo:(id)sender {

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
DemoTapeTwoViewController *Second = [[DemoTapeTwoViewController alloc] initWithNibName:nil bundle:nil];
[self presentViewController:Second animated:YES completion:NULL];

} else {
DemoTapeTwoViewController *Second = [[DemoTapeTwoViewController alloc] initWithNibName:@"DemoTapeTwoViewController_iPad" bundle:nil];
[self presentViewController:Second animated:YES completion:NULL];


}

我有两个xib,

iPhone 5 之一:XViewController_568.xib

iPhone 4 之一:XViewController.xib

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
if ([[ UIScreen mainScreen ] bounds ].size.height == 568 ) {
nibName = [NSString stringWithFormat:@"%@_568", nibName];
}
if (self = [super initWithNibName:nibName bundle:nibBundle]) {

}
return self;
}

这个 ^ 放在 .m 文件中

它应该检测屏幕是 iPhone 5 还是 iPhone 4 屏幕并根据它调整 Xib。

但是,Xcode 出错了:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序, 原因:'无法在 bundle 中加载 NIB:'NSBundle/Users/SamGuichelaar/Library/Application Support/iPhone Simulator/6.1/Applications/321B4512-7BD3-46D8-A944-F12029448326/Parkway Drive Gestures.app(已加载)',名称为'(空)_568''首先抛出调用栈:

所以,出现问题导致它找不到 iPhone 4 Xib 的原始名称。

谁能帮帮我?

最佳答案

我建议检查 nibName 是否为 nil,如果是则使用类名。

我喜欢使用 ?:对于这种快速替换。

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
if ([[ UIScreen mainScreen ] bounds ].size.height == 568 ) {
nibName = [NSString stringWithFormat:@"%@_568", nibName ?: @"DemoTapeTwoViewController"];
}

if (self = [super initWithNibName:nibName bundle:nibBundle]) {

}
return self;
}

要使其更通用,请使用 NSStringFromClass() .

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
if ([[ UIScreen mainScreen ] bounds ].size.height == 568 ) {
nibName = [NSString stringWithFormat:@"%@_568", nibName ?: NSStringFromClass([self class])];
}

if (self = [super initWithNibName:nibName bundle:nibBundle]) {

}
return self;
}

关于ios - 为 iPhone 5 加载不同的 xib 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17330833/

26 4 0
文章推荐: ios - 这个 block 声明有什么问题?
文章推荐: ios - Storyboard、UICollectionview、发送到实例的无法识别的选择器
文章推荐: python - 如何在 Django 管理表单 save_model 中获取字段值
文章推荐: 使用 Jasmine 和 Sinon 测试主干模型 - 对象 # 没有方法 'spy'