В качестве летнего проекта я делаю приложение-викторину для iOS, которое имеет заранее определенных пользователей. Однако количество викторин и пользователей изменится; поэтому я хочу взять свою базу данных реального времени, которая выглядит так:
и сделайте так, чтобы для каждой викторины создавалась ветка викторины, а для каждого студента под этой веткой викторины создавалась ветка учеников, как показано ниже:
Несмотря на то, что мой опыт работы с 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.
}
Спасибо за комментарий. Как вы думаете, какого аспекта мне не хватает. ИМО, полнота может быть не полностью решена, но я хочу защитить личность пользователей, которые на самом деле находятся в Xcode и firebase, поэтому я сделал пример базы данных, чтобы подражать тому, что я хотел бы сделать.
Мой комментарий был не для вашей базы данных, а из-за того, что вы не продемонстрировали свои усилия ... Что вы пробовали до сих пор? Отредактируйте свой вопрос и опубликуйте свой код. Мне также нужны пояснения по поводу «может ли автономно добавлять новые викторины и новых или старых учеников», в частности, что вы подразумеваете под автономно?
извините, если была какая-то путаница, автономно я имел в виду набор вложенных циклов for, которые будут зацикливаться, когда есть ветвь викторины make quiz, и еще один цикл for, который для каждого ученика создает ветвь ученика с оценкой и атрибутом take. Я работаю над добавлением своего кода, но, честно говоря, после того, как я увидел, что установленное значение повлияло на мою исходную базу данных (переопределить все), я больше ничего не пробовал.
хорошо, покажи свою попытку, и мы возьмем ее оттуда ...





Вам нужно сделать изменяемую копию данных, добавить новые данные, а затем отправить эти изменения в Firebase.
[[[[[FIRDatabase database] reference] child:@"Some_Root"] child:@"Some_Child"] setValue:SOME_DICTIONARY];
Спасибо за комментарий, можете ли вы уточнить, как «передать эти изменения в Firebase», как если бы есть команда для добавления ветвей и дочерних ветвей или прямого импорта списка, который имеет «изменяемую копию данных»
С Firebase вы просто создаете NSArray или NSDictionary, а у Firebase API есть метод для передачи этих данных: child:setValue:
Проверьте ссылку Как создать минимальный, полный и проверяемый пример stackoverflow.com/help/mcve