Обновление дочернего значения в Firebase iOS и ссылка на автоматический идентификатор в других узлах - PullRequest
0 голосов
/ 10 июня 2018

Эта структура предназначена для записи данных на сервер Firebase.Однако у меня есть сложности в реальном коде, чтобы написать структуру таким образом.

Часть, в которой я запутался, получает autoID (-LETR-XJvQsZCOpG-T1N) в качестве ссылки для узлов all_images и all_plan_deatils.Я не могу найти лучший способ написать этот код.Любые предложения очень помогут.Заранее спасибо

PlanIt
 plans
  -LETR-XJvQsZCOpG-T1N
    Uid: "ZjtJdkjzuxc0mZn4u9TfWsXa9jh2"
    date: "20180609"
    title: "This weekend Plans?"
  -UYijs09as9jiosdijfi
    Uid: "some uid"
    date: "20180609"
    title: "some title"

 all_images:
    -LETR-XJvQsZCOpG-T1N
       image_0: "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.c.."
       image_1: "https://img.evbuc.com/https%3A%2F%2Fcdn.evbuc.c.."

 all_plan_details
    -LETR-XJvQsZCOpG-T1N
       detail_0: "Bike Rodeo, Safety Presentation and Riding Tour o"
       detail_1: "Bike Rodeo, Safety Presentation and Riding Tour o"
  • ОБНОВЛЕНИЕ

это функция, в которой я пытаюсь обновить узлы.Мой мыслительный процесс здесь - сначала я установил название плана и UID, которые будут созданы как Auto Id.Затем я пытаюсь сослаться на «ключ», который был создан с помощью автоматического идентификатора, затем я пытаюсь сохранить all_images & all_dates для хранения со ссылкой на тот же ключ, который был создан вызовом childByAutoID, а затем я обновляю эти значения.

Извините за любой беспорядок или замешательство в коде, я буквально редактирую что-то, потому что мы произносим определенные имена и тому подобное, но я надеюсь, что вы можете понять общую идею того, что я пытаюсь по-прежнему пытаться.

func uploadPlanitData(plan: [String], withDate: [String], withImage: [String], withTitle: String, forUID uid: String, sendComplete: @escaping (_ status: Bool) -> ()) {


    _REF_PLANITS.childByAutoId().updateChildValues(["Planit Title" : withTitle, "uid": uid])


    let key = _REF_PLANITS.key

    let allImages = "all_images/\(key)/"

    let allDates = "all_dates/\(key)"

    let childUpdate = [allImages : withImage, allDates: withDate]
    _REF_ALL_IMAGES.updateChildValues(childUpdate)

    sendComplete(true)
}

ОБНОВЛЕНИЕ - этот блок кода в настоящее время структурирует мою БД примерно так - что почти ПОЛНОСТЬЮ правильно - за исключением узлов all_images & all_dates вместо "planits" - я ожидаю, что этот ключ будет (-LEaaZrwYI_SqonuREV9) есть.Таким образом, у меня есть способ уникально сгруппировать каждое изображение и дату с планом, к которому они принадлежат

Planit
 Plans  
    -LEaaZrwYI_SqonuREV9
     senderId
     title: 


all_dates
 planits
 0: ""

 all_images
 planits
 0: ""

1 Ответ

0 голосов
/ 10 июня 2018

Если я правильно понимаю, вы хотите создать новый ключ для нового плана, а затем сохранить информацию в других узлах с тем же ключом.В таком случае это выглядело бы так:

let newPlanetRef = _REF_PLANITS.childByAutoId()
newPlanetRef.updateChildValues(["Planit Title" : withTitle, "uid": uid])

let key = newPlanetRef.key

let childUpdate = [allImages : withImage, allDates: withDate]
_REF_ALL_IMAGES.child(key).updateChildValues(childUpdate)

Это предполагает, что _REF_PLANITS - это DatabaseReference до /PlanIt/plans, а _REF_ALL_IMAGES - это ссылка на /PlanIt/all_images.

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