首页 > 解决方案 > macCatalyst 共享扩展偶尔会阻止输入?

问题描述

我的共享扩展代码有一个难以重现的问题,我很难修复 - 我在任何地方都找不到任何类似的问题,到目前为止我的尝试都是在黑暗中拍摄的。

这是一款 Catalyst 应用程序,在 iOS 和 iPadOS 上运行良好。此问题仅发生在 Catalyst 上。

当用户从 Safari 打开共享扩展时,会弹出一个表单,有时无法与之交互。单击按钮或尝试专注于文本字段不会做任何事情。它只是阻止所有输入,摆脱这种情况的唯一方法是重新启动 Safari。这非常烦人,但非常随机发生,可能每天一到两次。

NSExtensionPrincipalClass设置为AddPostNavigationController如下所示:

init() {
    AppDefaults.registerDefaults()

    self.account = AccountManager.shared.account
    self.viewController = account.isLoggedIn ? EditPostViewController(account: account) : EmptyViewController(account: account)

    super.init(rootViewController: viewController)
}

override func beginRequest(with context: NSExtensionContext) {
    super.beginRequest(with: context)

    switch viewController {
    case let viewController as EditPostViewController:
        let _ = viewController.view
        viewController.actionExtensionContext = context
    case let viewController as EmptyViewController:
        let _ = viewController.view
        viewController.actionExtensionContext = context
    default:
        break
    }
}

两者中的actionExtensionContext属性EditPostViewControllerEmptyViewController根据网站填充表单值并设置回调,例如:

onCancel = { extensionContext.completeRequest(returningItems: nil) }
onPostSaved = { extensionContext.completeRequest(returningItems: nil) }

每次共享扩展弹出时,我都可以看到正确设置了表单值。它只是不时拒绝接受输入。

标签: iosswiftmac-catalyst

解决方案


推荐阅读