Получение этой ошибки при добавлении новых данных ... Поток 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)
            }
        })
    }

0 ответов

Другие вопросы по тегам