Неоднозначная ссылка на член 'save (_: завершенииHandler :)' с попыткой сохранения CloudKit - PullRequest
1 голос
/ 18 января 2020

Я пытаюсь сохранить обратно в CloudKit после обновления списка ссылок и получения ошибки в первой строке этого блока кода.

Ошибка: неоднозначная ссылка на элемент 'save (_: завершениеHandler:) '

CKContainer.default().publicCloudDatabase.save(establishment) { [unowned self] record, error in
  DispatchQueue.main.async {
    if let error = error {
      print("error handling to come")
    } else {
      print("success")
    }
  }
}

Это находится внутри функции, где пользователь собирается следовать заданному местоположению (Создание). Мы берем существующее заведение и его список подписчиков, проверяем, есть ли в нем выбранный пользователь, и добавляем их в список, если нет (или создаем его, если список подписчиков равен нулю).

Edit, in case helpful
//Both of these are passed in from the prior view controller
  var establishment: Establishment?
  var loggedInUserID: String?

@objc func addTapped() {
    // in here, we want to take the logged in user's ID and append it to the list of people that want to follow this establishment
    // which is a CK Record Reference
    let userID = CKRecord.ID(recordName: loggedInUserID!)
    var establishmentTemp: Establishment? = establishment
    var followers: [CKRecord.Reference]? = establishmentTemp?.followers

    let reference = CKRecord.Reference(recordID: userID, action: CKRecord_Reference_Action.none)
    if followers != nil {
      if !followers!.contains(reference) {
        establishmentTemp?.followers?.append(reference)
      }
    } else {
      followers = [reference]
      establishmentTemp?.followers = followers
      establishment = establishmentTemp
    }

[это то место, где появляется блок CKContainer.default ..... save, вставленный вверху вопроса]

Я просмотрел различные посты на ' неоднозначная ссылка », но не смог выяснить источник моей проблемы. попытался явно установить типы для EstablisthmentTemp и последователей в случае, если это было проблемой (на основе решений других связанных постов), но безуспешно. Боюсь, что я вне идей как относительно неопытный новичок ie!

Помощь оценена.

1 Ответ

0 голосов
/ 19 января 2020

Документирование решения, которое я выяснил:

Сочетание двух проблем:

  1. Я пытался сохранить обновленную версию Записи CK вместо обновления
  2. Я не передавал CK-запись в вызов save () - но пользовательский объект

(я считаю, что второй пункт был причиной ошибки «неоднозначная ссылка на члена»)

Я решил эту проблему, заменив попытку сохранения (первый блок кода в вопросе) на:

//first get the record ID for the current establishment that is to be updated
let establishmentRecordID = establishment?.id
//then fetch the item from CK

CKContainer.default().publicCloudDatabase.fetch(withRecordID: establishmentRecordID!) { updatedRecord, error in
  if let error = error {
    print("error handling to come")
  } else {

//then update the 'people' array with the revised one
    updatedRecord!.setObject(followers as __CKRecordObjCValue?, forKey: "people")
    //then save it    
    CKContainer.default().publicCloudDatabase.save(updatedRecord!) { savedRecord, error in
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...