CKShare и SwiftUI - PullRequest
       23

CKShare и SwiftUI

0 голосов
/ 21 апреля 2020

Спасибо, что нашли время, чтобы прочитать этот пост. Я довольно новичок в кодировании, поэтому, возможно, мои проблемы с попыткой реализовать CKShare с SwiftUI связаны с базовым пониманием концепции c, но я работал над этим несколько дней, и я не могу понять это самостоятельно.

Я проверил это: "SwiftUI и UICloudSharingController ненавидят друг друга" , но я не смог реализовать предложенное решение, возможно потому что я начал непосредственно с SwiftUI и не понимаю, как достаточно хорошо работает Swift.

Я хотел бы поделиться CKRecord в пользовательской зоне пользователя личная база данных . Я бы не стал использовать стандартные экраны Apple для добавления и удаления людей ( UICloudSharingController ), поскольку я обнаружил, что это не соответствует естественному путешествию моих пользователей.

Я кодировал строки ниже, чтобы User1 для создания CKShare и включения в качестве участников CKUserIdentit из User2 . Затем я захватил url для User2 , чтобы они могли принять общий ресурс.

На панели инструментов Cloudkit я вижу " cloudkit.share"запись типа в личной базе данных User1 . Пользователь2 действительно отображается в поле Обмен участниками Поле как Тип: Пользователь и Принятие: Приглашено .

Однако один раз Пользователь2 открывает URL-адрес в браузере как зарегистрированный пользователь iCloud, отображается следующая ошибка :

iCloud перестал отвечать

ОТЧЕТНАЯ ОШИБКА ОШИБКИ Требуется непустая строка.

ОТЧЕТНЫЙ ОШИБКА ТИПА UNHANDLED_EXCEPTION

ОШИБКА КОНТЕКСТА undefined

Кто-нибудь имел дело с чем-то подобным ранее? Есть ли другой способ включить известного пользователя приложения в CKShare ?

Заранее благодарен за помощь.

Вот мой код:

let share = CKShare(rootRecord: recordEquipo)
share[CKShare.SystemFieldKey.title] = "Equipo" as CKRecordValue?
share[CKShare.SystemFieldKey.shareType] = "Some type" as CKRecordValue?
let fetchParticipantsOperation: CKFetchShareParticipantsOperation = CKFetchShareParticipantsOperation(userIdentityLookupInfos: [CKUserIdentity.LookupInfo(emailAddress: DTMemail)] )
fetchParticipantsOperation.fetchShareParticipantsCompletionBlock = {error in
    if let error = error {
        print("error for completion" + error.localizedDescription)
        DispatchQueue.main.async {
            completion(.failure(error))
        }
    }
}
fetchParticipantsOperation.shareParticipantFetchedBlock = {participant in
    participant.permission = .readWrite
    share.addParticipant(participant)
    let modifyOperation: CKModifyRecordsOperation = CKModifyRecordsOperation(recordsToSave: [recordEquipo, share], recordIDsToDelete: nil)
    modifyOperation.savePolicy = .ifServerRecordUnchanged
    modifyOperation.perRecordCompletionBlock = {record, error in
        if let error = error {
            print("error for completion" + error.localizedDescription)
            completion(.failure(error))
        }
    }
    modifyOperation.modifyRecordsCompletionBlock = {records, recordIDs, error in
        guard let ckrecords: [CKRecord] = records, let _: CKRecord = ckrecords.first, error == nil else {
            print("error in modifying the records " + error!.localizedDescription)
            completion(.failure(error!))
            return
        }
        if (share.url != nil) {
            completion(.success(share.url!))}

    }

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