Диспетчергруппа не проводит другие мероприятия, что может происходить? - PullRequest
0 голосов
/ 31 января 2019

Итак, я строил эту функцию getQuestionValues(), чтобы извлекать и возвращать массив информации, извлеченной на базе Firebase.И это работает до определенного момента.Функция правильно выбирает данные из базы данных и сохраняет их в массиве.Я знаю это, потому что, когда я печатаю массив сразу после добавления последнего элемента, он возвращает ожидаемый результат.

override func viewDidLoad() {
    super.viewDidLoad()

    if let nav = self.navigationController {
        nav.isToolbarHidden = false
    }
    nextPath = sortNextQuestion()
    getQuestionValues(statementPath: nextPath[0], alternativeAPath: nextPath[1], alternativeBPath: nextPath[2], alternativeCPath: nextPath[3], alternativeDPath: nextPath[4], correctPath: nextPath[5])


    dispatchGroup.notify(queue: .main){
        print("nextquestion is gonna be:")
        print(self.nextQuestion)

    }
}

Функция, которую я построил:

 func getQuestionValues(statementPath: String, alternativeAPath: String, alternativeBPath: String, alternativeCPath: String, alternativeDPath: String, correctPath: String){
    print("entering dispatch group")
    self.dispatchGroup.enter()

    let refStatement = Database.database().reference(withPath: statementPath)
    let refOptionA = Database.database().reference(withPath: alternativeAPath)
    let refOptionB = Database.database().reference(withPath: alternativeBPath)
    let refOptionC = Database.database().reference(withPath: alternativeCPath)
    let refOptionD = Database.database().reference(withPath: alternativeDPath)
    let refCorrect = Database.database().reference(withPath: correctPath)

    refStatement.observe(.value) { (snapshot) in
        print(snapshot)
        let statement = snapshot.value as? String
        self.questionFetched.append(statement!)


    }
        //fetching alternativeA
        refOptionA.observe(.value) { (snapshot) in
            let optionA = snapshot.value as? String
            self.questionFetched.append(optionA!)


        }

        //fetching alternativeB
        refOptionB.observe(.value) { (snapshot) in
            let optionB = snapshot.value as? String
            self.questionFetched.append(optionB!)

        }

        //fetching alternativeC
        refOptionC.observe(.value) { (snapshot) in
            let optionC = snapshot.value as? String
            self.questionFetched.append(optionC!)


        }

        //fetching alternativeD
        refOptionD.observe(.value) { (snapshot) in
            let optionD = snapshot.value as? String
            self.questionFetched.append(optionD!)


        }

        //fetching correctAnswer
        refCorrect.observe(.value) { (snapshot) in
            let correct = snapshot.value as? Int
            let correctString = String(correct!)
            self.questionFetched.append(correctString)
            //left this print here just to understand that the function actually works, it is just delayed
            print(self.questionFetched)
        }



        print("new question fetched inside function:")
        print(self.questionFetched)

    print("leaving dispatch")
    self.dispatchGroup.leave()




}

Однако я неполучить желаемый результат в ожидаемое время.Я хотел бы использовать его результат на viewDidLoad(), но кажется, что фрагмент кода внутри dispatchGroup.notify(queue: .main) не ожидает загрузки функции getQuestionValues(), как я и собирался.

Что может происходить

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