Дочерние записи не отображаются в общей базе данных при совместном использовании родительской записи в CloudKit - PullRequest
1 голос
/ 09 мая 2020

У меня есть приложение, в котором я могу делиться записями с другими пользователями, все работает, когда я делюсь одной записью, моя проблема заключается в том, что когда я делюсь записью (родительской записью), которая имеет дочерние записи, ссылающиеся на нее, я вижу родительскую запись в Shared Database на панели управления CloudKit после того, как пользователь принимает общий ресурс, но я не вижу никаких связанных дочерних записей.

На основе видеороликов WWD C и некоторых других потоков здесь, в Stack Overflow , дочерние записи автоматически передаются, когда вы делитесь родительской записью, но это не то, что я вижу, опять же, я вижу родительскую запись в Shared Database, но не дочерние записи.

Вот обзор настройки приложения в CloudKit Dashboard.

На панели управления CloudKit у меня есть записи типа Lists и Items, где запись Lists является родительской для одной или много Items. В схеме Items у меня есть тип поля Reference, в котором хранится ссылка на его родительский список.

Вот код, который я использую для сохранения родительской записи.

func shareList(){        
    let share = CKShare(rootRecord: self.list)

    if let listName = self.list.object(forKey: "name") as? String {
        self.listName = self.list.object(forKey: "name") as? String
        share[CKShare.SystemFieldKey.title] = "Sharing \(listName)" as CKRecordValue?

    } else {
        share[CKShare.SystemFieldKey.title] = "" as CKRecordValue?
    }
    share[CKShare.SystemFieldKey.shareType] = "com.mySite.lists" as CKRecordValue

    let sharingViewController = UICloudSharingController(preparationHandler: {(UICloudSharingController, handler: @escaping (CKShare?, CKContainer?, Error?) -> Void) in
        let modRecordsList = CKModifyRecordsOperation(recordsToSave: [self.list, share], recordIDsToDelete: nil)

        modRecordsList.modifyRecordsCompletionBlock = {
            (record, recordID, error) in

            handler(share, CKContainer.default(), error)
        }
        CKContainer.default().privateCloudDatabase.add(modRecordsList)
    })

     sharingViewController.delegate = self
     sharingViewController.availablePermissions = [.allowPrivate]
     self.navigationController?.present(sharingViewController, animated:true, completion:nil)
}

Что мне не хватает? Есть ли какие-то дополнительные настройки, которые мне нужно сделать при совместном использовании родительской записи?

Я прав, говоря, что дочерние записи должны автоматически совместно использоваться только с родительской записью?

Вот изображение, демонстрирующее взаимосвязь между элементами и списком, работает в Private Database.

enter image description here

1 Ответ

1 голос
/ 10 мая 2020

Вы должны установить родителя для каждой дочерней записи, используя setParent: https://developer.apple.com/documentation/cloudkit/ckrecord/1690507-setparent

Вот так:

childRecord.setParent(parentRecord)

Надеюсь, это поможет.

...