Eam*_*onn 7 ios swift cloudkit
func application(_ application: UIApplication, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata) {...}
Run Code Online (Sandbox Code Playgroud)
在指向共享 cloudkit 记录的链接上单击“确定”后不会被调用。应用程序会打开,但这个函数(应该被调用)不会。
func application(_ application: UIApplication, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata) {
print("you accepted something")
let acceptShareOperation: CKAcceptSharesOperation = CKAcceptSharesOperation(shareMetadatas:[cloudKitShareMetadata])
//acceptShareOperation.qualityOfService = .userInteractive
acceptShareOperation.perShareCompletionBlock = {meta, share,
error in
print("share was accepted")
}
acceptShareOperation.acceptSharesCompletionBlock = {
error in
/// Send your user to where they need to go in your app
print("share accepted completion block!")
}
CKContainer(identifier: cloudKitShareMetadata.containerIdentifier).add(acceptShareOperation)
}
Run Code Online (Sandbox Code Playgroud)
预期结果:至少看到“你接受了某些东西”这一行打印在控制台上。
更新:恢复到 IOS11.3 不起作用。
更新:我下载了一个有人使用 cloudkit 构建的教程,并且(经过一番折腾,让他们的代码开始工作。然后我删除了他们的代码并将我的代码放入其中,现在该功能正常工作,所以我认为这个问题可能有一些问题做任何一个:
Nik*_*nko 16
如果您使用新的 Xcode 11 项目,则有SceneDelegate.swift. 您需要在那里实施:
internal func windowScene(_ windowScene: UIWindowScene, userDidAcceptCloudKitShareWith cloudKitShareMetadata: CKShare.Metadata) { }
如果你想在userDidAcceptCloudKitShareWith里面被调用,AppDelegate.swift你必须从Info.plist文件中删除下一行:
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
</dict>
Run Code Online (Sandbox Code Playgroud)
更新
如果您尝试使用 Scene Manifest 在冷启动时接受共享,CKShare.Metadata则将传递给func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions)in connectionOptions。
经过两天的反复试验,我终于成功了。
该问题似乎与苹果新的 Core Data + Cloudkit 同步功能有关。他们似乎掩盖了我需要调用的 appdelegate 函数。
我通过在 Xcode 10 中重建应用程序,然后在 XCode 11 中打开它而不进行任何更改来解决了该问题。我也会通知苹果。
谢谢我。不客气。