Как создать новую общую запись в Cloudkit, не будучи владельцем родительской? - PullRequest
1 голос
/ 21 октября 2019

Я занимаюсь разработкой приложения, которое в основном похоже на общий список покупок. Я готов использовать Cloudkit.

Нет смысла делиться индивидуально каждым элементом списка покупок, поэтому идея состоит в том, чтобы создать общий доступ на уровне списка. Таким образом, все элементы в списке являются общими, как объяснено здесь

Я успешно реализовал эту идею. По сути, владелец списка может создавать элементы, и каждый раз, когда элемент создается, пользователи, которые согласились поделиться списком с владельцем, могут видеть новый элемент в Shared Database. Я также проверил, что когда пользователь изменяет существующую запись в своем Shared Database, это изменение отражается в Private Database владельца.

Теперь проблема в том, что кто-то, кто не является владельцем списка, может захотеть создать новый элемент. По сути, если 2 человека делятся списком покупок, они оба должны иметь возможность добавить новую вещь в список покупок! Похоже, что это невозможно на Cloudkit. Другими словами, похоже, что только владелец записи parent может создавать дочерние записи. Кто-нибудь нашел решение для такого варианта использования?

1 Ответ

1 голос
/ 22 октября 2019

Я отвечаю на свой собственный вопрос после расследования больше.

Кажется, что невозможно создать общую запись в консоли Cloudkit, не будучи владельцем, но это возможно из Swift.

Вот пример кода для этого:

      let sharedDatabase = CKContainer.default().sharedCloudDatabase
        sharedDatabase.fetchAllRecordZones { (recordZone, error) in
            let myZoneID = recordZone![0].zoneID//Temporary hack
            let query = CKQuery(recordType: "parentRecordType", predicate: NSPredicate(format: "TRUEPREDICATE", argumentArray: nil))
            sharedDatabase.perform(query, inZoneWith: myZoneID) { (records, error) in
                print(records)
                let newID = CKRecord.ID(zoneID: myZoneID)
                let nameRecord = CKRecord(recordType: "childRecordType", recordID: newID)
                 nameRecord.setValue("Created by someone who is not the owner", forKey: "title")
                nameRecord.parent = CKRecord.Reference(record:records![0], action: .none)


                 CKContainer.default().sharedCloudDatabase.save(nameRecord) { (savedRecord: CKRecord?, error: Error?) -> Void in
                    print(error)

                }
            }
         }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...