Это мой второй пост в этой замечательной группе, за последние 5 дней я работал над тем, как получить данные из Firestore
и сравнить их с моим текущим пользователем location
. Кажется, все работает хорошо, за исключением случаев, когда я тестирую свое приложение в режиме реального времени (с моим iPhone). Иногда он показывает правильное место, а иногда он падает или показывает случайное место. Я работаю с методом where()
для доступа к данным из моего Firestore
, и кажется, что он возвращает то, что мне нужно. Я чувствую, что мое имя в моем документе не работает правильно в тот момент, когда я получаю доступ к информации.
Вот мой код:
Скриншоты Firebase:
Место 1
Место 2
//Creating access to locationManager
var locationManager : CLLocationManager!
@IBOutlet weak var latLabel: UILabel!
@IBOutlet weak var lonLabel: UILabel!
@IBOutlet weak var place: UILabel!
@IBOutlet weak var placeImage: UIImageView!
//Storing the pass data that we got from the firt View
var placeName = String()
var latStore = String()
var lonStore = String()
var lonNumberStore = Double()
var latNumberStore = Double()
var fireLonMax = Double()
var fireLatMax = Double()
var fireLonMin = Double()
var fireLatMin = Double()
override func viewDidLoad() {
//Here goes some code to display on the SecondViewController
latLabel.text = latStore
lonLabel.text = lonStore
latMaxRead()
latMinRead()
lonMaxRead()
lonMinRead()
}
//This is my button to test if I am in the correct place
@IBAction func updateLocation(_ sender: UIButton) {
//
if (fireLatMin...fireLatMax).contains(latNumberStore) && (fireLonMin...fireLonMax).contains(lonNumberStore){
print("Is good place",fireLonMin,fireLonMax,fireLatMin,fireLatMax)
place.text = placeName
} else {
print("Is not good place", fireLonMin,fireLonMax,fireLatMin,fireLatMax)
place.text = "Bad"
}
}
func latMaxRead() {
let docRef = Firestore.firestore()
docRef.collection("places")
.whereField("latMax", isGreaterThanOrEqualTo: latNumberStore)
.getDocuments { (snapshot, error) in
if error != nil {
print("Error getting documents: \(String(describing: error))")
} else {
for document in (snapshot?.documents)! {
self.fireLatMax = document.data()["latMax"] as! Double
//This is where I pull the placeName on my Firebase
self.placeName = document.data()["placeName"] as! String
print("Fire latMax:", self.fireLatMax)
}
}
}
}
func latMinRead() {
let docRef = Firestore.firestore()
docRef.collection("places")
.whereField("latMin", isLessThanOrEqualTo: latNumberStore)
.getDocuments { (snapshot, error) in
if error != nil {
print("Error getting documents: \(String(describing: error))")
} else {
for document in (snapshot?.documents)! {
self.fireLatMin = document.data()["latMin"] as! Double
self.placeName = document.data()["placeName"] as! String
print("Fire latMin: ", self.fireLatMin)
}
}
}
}
func lonMaxRead() {
let docRef = Firestore.firestore()
docRef.collection("places")
.whereField("lonMax", isGreaterThanOrEqualTo: lonNumberStore)
.getDocuments { (snapshot, error) in
if error != nil {
print("Error getting documents: \(String(describing: error))")
} else {
for document in (snapshot?.documents)! {
self.fireLonMax = document.data()["lonMax"] as! Double
self.placeName = document.data()["placeName"] as! String
print("Fire lonMax: ", self.fireLonMax)
}
}
}
}
func lonMinRead() {
let docRef = Firestore.firestore()
docRef.collection("places")
.whereField("lonMin", isLessThanOrEqualTo: lonNumberStore)
.getDocuments { (snapshot, error) in
if error != nil {
print("Error getting documents: \(String(describing: error))")
} else {
for document in (snapshot?.documents)! {
self.fireLonMin = document.data()["lonMin"] as! Double
self.placeName = document.data()["placeName"] as! String
print("Fire lonMin : ", self.fireLonMin)
}
}
}
}
Я чувствую и очень уверен, что делаю что-то не так, либо с моими запросами, либо с моим placeName.
Результаты моей консоли и симулятора:
Результат с моей консоли и моего симулятора
Я думаю, что where()
- это метод, который не мешает моему результату, но я не совсем уверен.