Как добавить в сегмент базы данных Firebase в реальном времени с помощью Xcode

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

Как добавить в сегмент базы данных Firebase в реальном времени с помощью Xcode

и сделайте так, чтобы для каждой викторины создавалась ветка викторины, а для каждого студента под этой веткой викторины создавалась ветка учеников, как показано ниже:

Как добавить в сегмент базы данных Firebase в реальном времени с помощью Xcode

Несмотря на то, что мой опыт работы с firebase и Xcode ограничен, я знаю, как читать из базы данных и устанавливать для ветки определенное значение. Таким образом, суть вопроса заключается в том, как создавать новые ветки или добавлять старые ветки базы данных реального времени firebase из Xcode.

Сегмент Xcode ViewController ниже:

import UIKit
import Firebase

class ViewController: UIViewController {


@IBOutlet weak var greetingLbl: UILabel!
@IBOutlet weak var textField: UITextField!

var students = [Student]()
var quizzes = [Quiz]()
var squizzes = [SpecQuiz]()
var passsedQuizzes = [SpecQuiz]()
var loggedStud = Student(nme: "", id: "")
var count = 0
//variables that are not used are used in different functions not shown for readability

var ref = Database.database().reference()
var refStudents: DatabaseReference!
var refQuizzes: DatabaseReference!   

override func viewDidLoad() {
    super.viewDidLoad()
    ref = Database.database().reference()
    refStudents = Database.database().reference().child("Students")
    refStudents.observe(DataEventType.value, with: {(snapshot) in
        if snapshot.childrenCount > 0 {
            self.students.removeAll()
            for student in snapshot.children.allObjects as![DataSnapshot]{
                let studentObject = student.value as? [String: AnyObject]
                let studentName = studentObject?["Name"]
                let studentID = studentObject?["ID"]

                let stud = Student(nme: (studentName as! String?)!, id: (studentID as! String?)!)

//Student is a class that has a name and id attribute

                self.students.append(stud)
            }
        }
    })
    refQuizzes = Database.database().reference().child("Quizzes")
    refQuizzes.observe(DataEventType.value, with: {(snapshot) in
        if snapshot.childrenCount > 0 {
            self.quizzes.removeAll()
            for quiz in snapshot.children.allObjects as![DataSnapshot]{
                let QuizObject = quiz.value as? [String: AnyObject]
                let QuizName = QuizObject?["Name"]
                let QuizAvailable = QuizObject?["Available"]

                let quiz = Quiz(nme: (QuizName as! String?)!, id: (QuizAvailable as! Bool?)!)

//Quiz is a class that has a name and available attribute

                self.quizzes.append(quiz)
            }
        }
    })
    for quiz in quizzes{
        //make new quiz branch
        for student in students{
            //make new student branch
        }
    }

        // Do any additional setup after loading the view, typically from a nib.
}

Проверьте ссылку Как создать минимальный, полный и проверяемый пример stackoverflow.com/help/mcve

Do2 19.07.2018 23:03

Спасибо за комментарий. Как вы думаете, какого аспекта мне не хватает. ИМО, полнота может быть не полностью решена, но я хочу защитить личность пользователей, которые на самом деле находятся в Xcode и firebase, поэтому я сделал пример базы данных, чтобы подражать тому, что я хотел бы сделать.

TheNesh 19.07.2018 23:08

Мой комментарий был не для вашей базы данных, а из-за того, что вы не продемонстрировали свои усилия ... Что вы пробовали до сих пор? Отредактируйте свой вопрос и опубликуйте свой код. Мне также нужны пояснения по поводу «может ли автономно добавлять новые викторины и новых или старых учеников», в частности, что вы подразумеваете под автономно?

Do2 19.07.2018 23:12

извините, если была какая-то путаница, автономно я имел в виду набор вложенных циклов for, которые будут зацикливаться, когда есть ветвь викторины make quiz, и еще один цикл for, который для каждого ученика создает ветвь ученика с оценкой и атрибутом take. Я работаю над добавлением своего кода, но, честно говоря, после того, как я увидел, что установленное значение повлияло на мою исходную базу данных (переопределить все), я больше ничего не пробовал.

TheNesh 19.07.2018 23:17

хорошо, покажи свою попытку, и мы возьмем ее оттуда ...

Do2 19.07.2018 23:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
212
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Пример Obj-C:

[[[[[FIRDatabase database] reference] child:@"Some_Root"] child:@"Some_Child"] setValue:SOME_DICTIONARY];

Спасибо за комментарий, можете ли вы уточнить, как «передать эти изменения в Firebase», как если бы есть команда для добавления ветвей и дочерних ветвей или прямого импорта списка, который имеет «изменяемую копию данных»

TheNesh 20.07.2018 19:49

С Firebase вы просто создаете NSArray или NSDictionary, а у Firebase API есть метод для передачи этих данных: child:setValue:

WrightsCS 20.07.2018 22:07

Другие вопросы по теме