显示键盘后离开应用程序时出现快照错误(需要 afterScreenUpdates:YES)

2024-01-31

我目前正在启动一个新的测试项目,用于通过单独的(模式)视图导入客户端证书。该应用程序始终以“主视图”视图开始(主视图 https://i.stack.imgur.com/xtFsC.png),我有一些虚拟元素来测试连接是否有效。一旦用户将文件添加到我的应用程序(例如,在邮件中打开它或在模拟器中拖放),“证书导入”视图就会通过 Segue 显示。当用户点击“输入证书密码”文本字段时,会弹出键盘。返回时,如果输入的密码对于导入的 p12 客户端证书正确,则调用 .resignFirstResponder() 并通过标签调用应用程序。我想要我的“证书导入”视图(证书导入视图 https://i.stack.imgur.com/WSxeq.png) 在应用程序关闭或多任务处理激活时被关闭。我通过在CertificateImportViewController 上的应用程序委托的applicationWillResignActive(application:) 方法中调用dismiss(animated:completion:) 来实现这一点。

现在,当我关闭应用程序或仅在“证书导入视图”中显示键盘后才切换到多任务处理时,就会出现问题。

当我在以下状态下关闭/多任务应用程序时,我会在调试器控制台中获得相应的条目:

  1. 当显示键盘并且我处于证书导入视图时:[Snapshotting] Snapshotting a view (0x7fa91506b200, UIKeyboardImpl) that is not in a visible window requires afterScreenUpdates:YES.

  2. 即使当我离开证书导入视图并返回“主视图”时:[Snapshotting] Snapshotting a view (0x7fa91506b200, UIKeyboardImpl) that is not in a visible window requires afterScreenUpdates:YES.

  3. 在证书导入视图中显示键盘后,离开应用程序,再次打开应用程序,然后关闭/多任务应用程序:[Snapshotting] Snapshotting a view (0x7f99e3821600, UIKeyboardImpl) that has not been rendered at least once requires afterScreenUpdates:YES.

我试图找出是什么让操作系统认为它必须拍摄包括键盘的快照,即使主视图从未显示键盘。我还试图找出为什么键盘认为它必须在键盘被关闭后对其进行快照(resignFirstResponder())。我不确定如何调试将我的证书导入视图保留在堆栈上的原因(我认为这可能是一个原因)。

AppDelegate.swift

func applicationWillResignActive(_ application: UIApplication) {

    guard let rv = window?.rootViewController as? UINavigationController else {
        print("No Navigation Controller")
        return
    }

    if let r = rv.presentedViewController as? UINavigationController, let c = r.topViewController as? CertificateImportViewController {
        c.dismiss(animated: true, completion: nil)
    }
}


func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {

    self.fileBlobURL = url

    guard let rv = window?.rootViewController as? UINavigationController else {
        print("No Navigation Controller")
        return false
    }

    guard let myEntryViewController = rv.topViewController, myEntryViewController.title == "MainView" else {
        print("Wrong View Controller")
        return false
    }

    myEntryViewController.performSegue(withIdentifier: "ShowCertificateImport", sender: myEntryViewController)

    return true
}

证书导入视图控制器.swift

class CertificateImportViewController: UIViewController {

    var fileURL: URL?
    var credential: URLCredential?

    @IBOutlet weak var certpwTextField: UITextField!
    @IBOutlet weak var certResult: UILabel!
    @IBOutlet weak var saveButton: UIBarButtonItem!

    override func viewDidLoad() {
        super.viewDidLoad()

        certpwTextField.delegate = self

        let appdelegate = UIApplication.shared.delegate as! AppDelegate
        guard let u = appdelegate.fileBlobURL else {
            print("No file blob path found!")
            return
        }

        self.fileURL = u
    }

    @IBAction func cancel(_ sender: UIBarButtonItem) {
        dismiss(animated: true, completion: nil)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        certpwTextField.resignFirstResponder()
        certpwTextField.delegate = nil

    }
}

经过更多的研究,包括大量的试验和错误,我意识到:

  • 当我的应用程序进入后台时,这不是我应该处理“隐藏敏感信息”的方式,请参阅 Apple 的问答 1838 https://developer.apple.com/library/archive/qa/qa1838/_index.html
  • 这也可能是本中提出的错误苹果开发者论坛帖子 https://forums.developer.apple.com/thread/63306

然而,如果将来有人找到解决这个问题的解决方案,出于好奇,我会对它是如何完成的非常感兴趣。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

显示键盘后离开应用程序时出现快照错误(需要 afterScreenUpdates:YES) 的相关文章

  • 需要一些关于调度队列、线程和 NSRunLoop 的澄清

    以下是我所知道和理解的事情 全局队列是一个同时队列 可以将任务分派给多个线程 不保证执行任务的顺序 例如 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY DE
  • 获取 iPhone 上 Spotify 中当前播放的歌曲

    访问MPMusicPlayerController systemMusicPlayer 下面的代码 适用于获取 Apple Music 应用程序中正在播放的曲目信息 但是我们有没有办法访问 Spotify 应用程序中当前播放的歌曲的信息 此
  • 清除绘图的UIView?

    我正在使用 UIView 的子类来绘制 这个子类视图用于在视图控制器上获取您的签名 有一个清除按钮应该可以清除 UIView 但它不起作用 这是我尝试过的 子类 h implementation subclassed uiview UIBe
  • 如何在 SpriteKit SKScene 类中启动 ReplayKit 屏幕录制

    我已经实施了ReplayKit in my SpriteKit游戏 但由于一切都在游戏内完成GameViewController录制按钮出现得太早 请看我的GameViewController下面的类 class GameViewContr
  • CMDeviceMotion userAcceleration 颠倒了?

    我在 CMDeviceMotion 中的 userAcceleration 字段中看到一些意外的读数 当我查看来自 CMAccelerometerData 的原始加速计数据时 我发现如果 iPhone 平放在桌子上 则读数为 1G 垂直向下
  • 在 XMPPFrameWork ios 中将 XMPPMessage 保存在 CoreData 中

    我正在开发一个聊天应用程序并使用 xmppframework 现在需要将消息存储在持久存储中 谁能告诉我如何在 IOS 中从 CoreData 存储和检索消息 由于您使用的是 github robbiehanson XMPPFramewor
  • 将光标移动到 UItextview 开头[重复]

    这个问题在这里已经有答案了 可能的重复 将光标移动到 UITextField 的开头 https stackoverflow com questions 4180263 moving the cursor to the beginning
  • 如何在 OauthSwift 库中设置回调 URL

    我正在开发一个项目 其中我正在实现 OAuthSwift 库以连接到同时使用 OAuth1 和 OAuth2 的多个不同社交网站 我已将应用程序设置为加载 Web 视图 将我带到我的社交网站 但我无法让应用程序重定向回来 一旦我加载我的凭据
  • 我想通过协议将数据从第二个 ViewController 传递到 TableView 单元

    这是我的ViewController2从我需要传递数据的地方 我如何传递数据 protocol oppo func datapass Name String className String rollnumner String school
  • iphone - UISearchBar 上的搜索按钮

    我有一个使用 UISearchBar 的搜索功能 它是即时发生的 所以我认为用 完成 替换键盘上的 搜索 按钮会更明显 有没有办法做到这一点 thanks 您可以更改keyboardTypeUISearchBar 对象的属性 然而 没有办法
  • Swift Joint:在可观察对象中使用计时器发布者

    在这个问题被标记为重复之前这另一个问题 https stackoverflow com questions 57199922 create a timer publisher using swift combine 我试图了解出版商是如何运
  • 橡皮擦在 iOS 绘图中不起作用

    我正在做一个绘图项目 其中有一个橡皮擦选项 下面给出的代码适用于我启动应用程序并绘制一些线条并继续使用橡皮擦时的代码 它工作正常 我得到了橡皮擦效果 现在第二种情况是我画了大约10条线 然后单击 撤消按钮 并撤消整个事情 然后我重做整个事情
  • 我如何让 WhatsApp 愿意向 iOS 中的特定用户撰写消息?

    我如何让 WhatsApp 愿意向特定用户撰写消息 当我在应用程序中选择联系人时 我想发送短信 这是我的代码 NSURL whatsappURL NSURL URLWithString whatsapp send abid XXX if U
  • 在 Swift 应用程序中从 Excel 文档读取数据

    我有一个 Excel 文档 其中包含一些表格和大量数据点 我想从中读取内容以填充一些 UICollectionView 单元格和我的应用程序的其他部分 就像是 Country Temperature Cost Spain 23 80 Fra
  • 在 NSData 和 base64 字符串之间转换

    在之间进行转换的最简单和最快的代码是什么NSData和一个base64字符串 我读过很多解决方案 其中大部分涉及添加另一个类等 我找到了一个很好的解决方案here http cocoawithlove com 2009 06 base64
  • iOS、Swift 3 - 当我从详细视图返回后单击“取消”时,UISearchBar 消失

    我在containerView中有一个tableView 以编程方式向其添加一个搜索栏 一切工作正常 除了这种情况 当我点击一个单元格时 当 tableView 由 searchBar 过滤时 然后我从明细视图返回 通过推送转场呈现 然后我
  • iPhone OpenGLES 2.0 文本纹理带有奇怪的边框(不是笔划)问题

    我正在使用 CoreGraphcis 创建文本纹理 不幸的是 文本呈现如下 文本颜色与背景相同以展示奇怪的边框 我尝试过使用描边颜色和边框 我认为这是针对 OpenGLES 2 0 而不是 CoreGraphics Create defau
  • 如何在没有 CLLocationManager 的情况下将 MKMapView 缩放到用户当前位置?

    随着MKMapView有一个名为 显示用户当前位置 的选项 它将自动显示用户的位置map 当找到该位置 以及如果它发生变化 时 我想移动并缩放到该位置 问题是 当用户位置更新时 似乎没有调用任何方法map 所以我无处可放的代码zoom sc
  • SwiftUI 多行文本背景颜色

    我在 SwiftUI 中有一个包含多行的文本视图 我知道我可以更改文本的背景颜色 Text
  • 使用其他应用程序打开 pdf

    我正在应用程序中显示 pdf 文件 我想在 nag bar 上显示 打开方式 选项 显示 iPhone 上安装的可以打开相同 pdf 的应用程序 如果用户选择任何应用程序 例如 pdf 查看器 则应该使用 pdf 查看器应用程序打开 pdf

随机推荐