首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SwiftUI中实现与NSPersistentCloudKitContainer的共享

在SwiftUI中实现与NSPersistentCloudKitContainer的共享
EN

Stack Overflow用户
提问于 2021-03-24 08:12:02
回答 2查看 471关注 0票数 1

有可能吗?

我有一个新的iOS 14应用程序设置了核心数据和云工具包。我不得不对我的Persistence.swift文件做了一些修改才能让它正常工作,但它工作起来没有任何故障。

我对用other iCloud Users实现共享很感兴趣,但是很多文档都过时了,令人困惑,而且看起来以前可能是不可能的,但现在呢?

我认为第一步是让我的数据库共享?我将以下行添加到我的Persistence.swift文件

代码语言:javascript
复制
container.persistentStoreDescriptions.first!.cloudKitContainerOptions?.databaseScope = .shared

(整个过程如下所示):

代码语言:javascript
复制
import CoreData

struct PersistenceController {
    static let shared = PersistenceController()
    let container: NSPersistentCloudKitContainer

    init(inMemory: Bool = false) {
        container = NSPersistentCloudKitContainer(name: "Shopmatic")

        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })

        container.viewContext.automaticallyMergesChangesFromParent = true
        container.viewContext.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
        
        container.persistentStoreDescriptions.first!.cloudKitContainerOptions?.databaseScope = .shared
    }
}

但是当我运行这个应用程序时,我得到以下错误

代码语言:javascript
复制
Thread 1: "CKDatabaseScopeShared is not supported with NSPersistentCloudKitContainer"

这并不鼓舞人心,但也许可以在公共数据库范围内实现共享?

我真的不确定下一步是什么?实现我自己的NSPersistentContainer,既可以同步到cloudkit,也可以共享?

EN

回答 2

Stack Overflow用户

发布于 2021-03-24 09:58:27

我相信基于this thread on the Apple dev forums的答案是否定的(我是MasonAndMuse there),但有一位苹果工程师说可以,但他不愿详细说明。不久之后,我停止了尝试,没有找到任何方法来绕过这个系统的不透明性质,就像现在一样。我没有看到任何其他人让它工作的迹象,但在8个月前放弃后,我还没有仔细观察过。当然,也许有一种方法--我希望被证明是错的!

我假设他们在iOS 15中引入了共享,但现在这不是很有帮助……太糟糕了,因为它现在已经很接近了,如果/当他们添加它时,它将节省很多时间...

票数 1
EN

Stack Overflow用户

发布于 2021-04-24 03:45:38

论坛上的苹果工程师的answer对我来说读得非常清楚:

我还没有实现这样的功能,但我会这样做:

  1. 在同一container.
  2. Start上获取CloudKit implementation working.
  3. Implement CloudKit sharing,将特定记录从NSPersistantCloudKitContainer传递到步骤2中实现的共享功能。

要使用CKDatabase.Scope = shared访问共享的Cloudkit数据库:

如果这是NSPersistentCloudKitContainer
:

代码语言:javascript
复制
container = NSPersistentCloudKitContainer(name: "AppName")


我会尝试像这样访问这个容器的共享DB:
:

代码语言:javascript
复制
let myAppsCloudKitContainer = CKContainer(identifier: "iCloud.com.name.AppName")
let myContainersSharedDatabase = myAppsCloudKitContainer.database(with: .shared)

要从NSPersistantCloudKitContainer访问数据以在CloudKit共享功能中使用,请使用NSPersistantCloudKitContainer实例方法

代码语言:javascript
复制
record(for managedObjectID: NSManagedObjectID)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66773027

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档