Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 模拟器iPhone X系列-使用所有按钮将无法识别的选择器发送到实例_Ios_Swift_Xcode_Uibutton - Fatal编程技术网

Ios 模拟器iPhone X系列-使用所有按钮将无法识别的选择器发送到实例

Ios 模拟器iPhone X系列-使用所有按钮将无法识别的选择器发送到实例,ios,swift,xcode,uibutton,Ios,Swift,Xcode,Uibutton,我使用的是Xcode 10.1,模拟器也是10.1版,但去年的前一个版本也是如此。我没有为此烦恼,因为我正在构建基本的ui和后端,所以跳过了它。现在我几乎准备好发布了,现在我需要在X系列上进行测试 每当我使用5S-8+中的任何其他常规模拟器iPhone时,都没有问题,一切正常,我触摸一个按钮,动作就会发生。我有一部iPhone 7+,使用实际的设备,按钮工作正常 但是,每当我使用模拟器并在触摸any视图控制器中的any按钮时选择任何iPhone X系列设备时,我总是会崩溃 由于未捕获的异常“NS

我使用的是Xcode 10.1,模拟器也是10.1版,但去年的前一个版本也是如此。我没有为此烦恼,因为我正在构建基本的ui和后端,所以跳过了它。现在我几乎准备好发布了,现在我需要在X系列上进行测试

每当我使用5S-8+中的任何其他常规模拟器iPhone时,都没有问题,一切正常,我触摸一个按钮,动作就会发生。我有一部iPhone 7+,使用实际的设备,按钮工作正常

但是,每当我使用模拟器并在触摸any视图控制器中的any按钮时选择任何iPhone X系列设备时,我总是会崩溃

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[\u UIBackButtonContainerView标题标签]:未识别的选择器已发送到实例0x7fdd99c759e0'

无论是什么原因导致X系列出现问题
[\u UIBackButtonContainerView标题标签]

我正在调试模式下运行Xcode:

可能是什么问题?

代码-

下面是按钮的图片,操作中只有一条打印语句:

以下是坠机的照片:


我通过@matt在评论中的评论缩小了缺陷,他说
我很难理解您显示的任何代码可能与UIBackButtonContainerView有什么关系。在我看来,我们希望看到的是您的后退按钮,而不是这个登录按钮
。当他说我查看了代码的其他部分时

这个LoginVC的问题是
根vc
,我没有任何barButtonItem,但是我用下面这行代码隐藏了vc中
backBarButton
项中的文本,该项被推上,因此它只会显示一个返回箭头

这在正在推送的父vc中:

// LoginVC with loginButton inside of it
navigationItem.backBarButtonItem = UIBarButtonItem(title: nil, style: .plain, target: nil, action: nil)
这是在被推上的子vc中:

// child vc that’s getting pushed on
if view.frame.width == 414 && view.frame.height == 896 || view.frame.width == 375 && view.frame.height == 812  {

    navigationController?.navigationBar.prefersLargeTitles = true
} else {

    navigationController?.navigationBar.prefersLargeTitles = false
}
我不知道为什么我可以在iPhone5、6、7和8系列上使用它,而在X系列上却没有问题。当我把这个评论出来时,它起了作用

为了让它工作并在下一个vc中仍然隐藏文本,我必须将代码更改为:

navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
区别在于
标题:
参数

当它不工作时,我将参数设置为
nil

为了让它工作,我将它设置为空引号:
“”

很奇怪的问题

更新进一步检查后,问题与

navigationController?.navigationBar.prefersLargeTitles = true
似乎无法使用上述代码并将backBarButton标题设置为nil。我猜苹果公司想确保在使用大型导航栏标题时有某种文本。

添加一点更新。似乎
prefersLargeTitles
navigationItem.backBarButtonim=uiBarButtonim(title:nil,style:plain,target:nil,action:nil)的组合会在某些iOS版本上导致崩溃

从一些测试来看,它似乎是在iOS 14上安装的,但苹果也添加了一个新的API,以在iOS 14上实现同样的功能,它不需要更新
BackbarButtonim

简而言之,要实现
nil
标题,同时仍允许长按手势在iOS 14及更高版本上显示历史记录,您需要添加一些条件逻辑

我们可以利用iOS 14的更干净的API来实现这一点。
backButtonDisplayMode=.minimal

不要使用标题,只使用后退按钮指示器图像

private func hideBackButtonTitle(用于viewController:UIViewController){
如果可用(iOS 14.0,*){
viewController.navigationItem.backButtonDisplayMode=.minimal
}否则{
//版本
谢谢兰斯,如果没有你的回答,我永远也找不到解决方案。这是最模糊的错误,苹果可以通过显示准确的错误信息做得更好。np,必须提前支付。这是一个非常令人沮丧的错误,错误消息是无用的。很高兴能帮忙。干杯根据Xcode 11.4.1进行确认。当“大标题”处于启用状态,并按下带有“nil back”按钮的视图控制器(位于navigationItem上)时,会发生所述致命错误。
navigationController?.navigationBar.prefersLargeTitles = true
private func hideBackButtonTitle(for viewController: UIViewController) {
    if #available(iOS 14.0, *) {
        viewController.navigationItem.backButtonDisplayMode = .minimal
    } else {
        // Versions < iOS 13 crash when using `prefersLargeTitle` and backButton with a `nil` title.
        viewController.navigationItem.backBarButtonItem = UIBarButtonItem(
                title: "",
                style: .plain,
                target: nil,
                action: nil
        )
    }
}