Получение этой ошибки при добавлении новых данных ... Поток 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
Поэтому, когда я загружаю свое приложение в первый раз и добавляю свой первый фрагмент данных, tableView перезагружается, и разделы / строки добавляются правильно, но когда я ввожу какие-либо дополнительные данные после этого, новый данные добавляются, но мои исходные данные дублируются в моем tableView (а не в бэкэнде), кроме того, если я добавляю данные в том же разделе, мое приложение вылетает, и я получаю ошибку, указанную в моем заголовке.
Хотите получить представление об этом. Это мое первое приложение Firestore, и я все еще пытаюсь понять его.
РЕДАКТИРОВАТЬ 1: Я попытался удалить два прослушивателя моментальных снимков, и это решило мою проблему с ошибкой, но мои данные по-прежнему дублируются...
РЕДАКТИРОВАТЬ 2: Забудь. Я понял. У меня был dataArray как глобальная переменная, которую я продолжал добавлять.
struct Workouts: Decodable {
var workout : String
}
struct Days: Decodable {
var dow : String
var workouts : [Workouts]
}
var dayCount = 0
var dataArray = [Days]()
//MARK: - viewDidLoad()
override func viewDidLoad() {
super.viewDidLoad()
vcBackgroundImg()
navConAcc()
picker.delegate = self
picker.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellID)
tableView.tableFooterView = UIView()
Auth.auth().addStateDidChangeListener { (auth, user) in
self.userIdRef = user!.uid
self.rootCollection = Firestore.firestore().collection("/users/\(self.userIdRef)/Days")
self.loadData { (Bool) in
if Bool == true {
self.dayCount = self.dataArray.count
self.tableView.reloadData()
}
}
}
}
//MARK: - Load Data
func loadData(completion: @escaping (Bool) -> ()){
let group = DispatchGroup()
self.rootCollection.addSnapshotListener ({ (snapshot, err) in
if let err = err
{
print("Error getting documents: \(err.localizedDescription)");
}
else {
guard let dayDocument = snapshot?.documents else { return }
for day in dayDocument {
group.enter()
self.rootCollection.document(day.documentID).collection("Workouts").addSnapshotListener{(snapshot, err) in
var workouts = [Workouts]()
let workoutDocument = snapshot!.documents
try! workoutDocument.forEach({doc in
let tester: Workouts = try doc.decoded()
let workoutString = tester.workout
let newWorkout = Workouts(workout: workoutString)
workouts.append(newWorkout)
})
let dayTitle = day.data()["dow"] as! String
let newDay = Days(dow: dayTitle, workouts: workouts)
self.dataArray.append(newDay)
group.leave()
}
}
}
group.notify(queue: .main){
completion(true)
}
})
}