При попытке получить значение historyRef в другом VC он возвращает ноль.Я пробовал разные решения (включая это, которое я использую), и я не могу получить фактическое значение переменной historyRef, как объявлено в viewDidLoad ().
База данных Firebase имеет узел "history", который имеет ключ (childByAutoId ()) в MainVC.Я пытаюсь получить доступ к этому ключу в SecondVC.
В MainVC есть константа:
var historyRef : FIRDatabaseReference!
var ref : FIRDatabaseReference!
Также объявлен экземпляр:
private static let _instance = MainVC()
static var instance: MainVC {
return _instance
}
viewDidLoad ():
historyRef = ref.child("history").childByAutoId()
SecondVC
class SecondVC: UIViewController {
var mainVC : MainVC? = nil // hold reference
override func viewDidLoad() {
super.viewDidLoad()
mainVC = MainVC() // create MainVC instance
getUserHistoryIds()
}
func getUserHistoryIds() {
let historyKey = mainVC?.historyRef
print("HistoryKey: \(String(describing: historyKey))")
}
}
распечатка:
HistoryKey: nil
Моя база данных:
my-app
- history
+ LSciQTJwR0VqwaAfKVz
Редактировать
Скореечем получить от другого контроллера, я получил от Firebase.
Мне удалось получить значение childAutoById, но в нем перечислены все, а не только текущий:
let historyRef = ref.child("history")
historyRef.observe(.value) { (snapshot) in
if snapshot.exists() {
for history in snapshot.children {
let snap = history as! FIRDataSnapshot
let _ = snap.value as! [String: Any] // dict
let historyKey = snap.key
print("History Key: \(historyKey)")
}
} else {
print("There are none")
}
}