【问题标题】:How to accept CloudKit shares with the new SwiftUI app lifecycle?如何在新的 SwiftUI 应用生命周期中接受 CloudKit 共享?
【发布时间】:2020-08-07 06:23:17
【问题描述】:

在 iOS 13 世界中,我有这样的代码:

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
        func windowScene(_ windowScene: UIWindowScene, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata) {
                // do stuff with the metadata, eventually call CKAcceptSharesOperation
        }
}

我正在将我的应用程序迁移到新的 SwiftUI 应用程序生命周期,但不知道将这个方法放在哪里。它曾经存在于 iOS13 之前的 AppDelegate 中,我尝试回到那个,但 AppDelegate 版本永远不会被调用。

似乎没有类似于 UIApplicationDelegateAdaptor 的 SceneDelegateAdaptor 可用,它可以为旧代码提供桥梁。

所以,我迷路了。如何在 SwiftUI 应用程序生命周期中接受 CloudKit 共享? ????

【问题讨论】:

  • 没有人。向 Apple 提交反馈,也许他们会在发布之前将其包含在内……而且,可能现在还不是迁移到 SwiftUI 生命周期的时候。

标签: swiftui cloudkit cloudkit-sharing


【解决方案1】:

您仍然可以将 AppDelegate 与 SwiftUI 的新生命周期一起使用,直到 Apple 发布 API 以在 SwiftUI 应用生命周期中本地处理此问题。

class AppDelegate: NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        return true
    }
}

@main
struct MyApp: App {

    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

Read this fore more

【讨论】:

  • AppDelegate 的一些方法被调用,但不是全部。在 iOS 13 中,一些回调从 AppDelegate 移到了 SceneDelegate。在带有 SwiftUI 的 iOS 14 中,似乎没有调用 userDidAcceptCloudKitShareWith 的 AppDelegate 和 SceneDelegate 版本。
  • @Jaanus 周围有锻炼吗?我有同样的问题stackoverflow.com/questions/67541441/…
  • 我知道的唯一解决方法是继续使用 UIKit 应用程序生命周期,直到这在 iOS SDK 中得到修复。 (它在带有 SwiftUI 生命周期的 AppKit 中运行良好,但在 UIKit 中运行良好。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
相关资源
最近更新 更多