Предотвращение случайного обновления при попытке вставить значения заполнителя в CoreData - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть простое приложение, в котором я пытаюсь разрешить пользователю добавлять поездки в неделю (расписание занятий). От недели к поездке существует отношение «Один ко многим».

Когда пользователь добавляет новую поездку - я хочу вставить поездку с заполнителем / фиктивной - которую я позже обновлю.

у меня есть проблема в том, что фиктивный элемент placeholderRide, который я создал ниже, прекрасно работает в первом случае - но с этого момента он фактически добавляет новую поездку в базу данных и отображает эту новую поездку в правильная неделя - но она НЕ УСТАНАВЛИВАЕТ ссылку из ранее добавленной поездки - таким образом, конечный результат - это максимальная вставка одной поездки в неделю (хотя БД заканчивается множеством бесхозных поездок!). Даже после перезапуска приложения.

Очевидно, что проблема связана с тем, что placeholderRide не является «новым» элементом, создаваемым при каждом вызове функции, а вместо этого просто обновляет его.

I я уверен, что упускаю очевидное - но что я должен изменить, чтобы каждый раз вставлять новую пустую поездку? И если я хочу вставить 10 новых поездок, я фактически вставляю их вместо вставки новой строки, но переопределяю существующие отношения, так что только одна строка имеет отношение к неделе?

@IBAction func addRideButton(_ sender: Any) {
    let placeholderRide = TempRide(context: context) //create a new ride to insert
    placeholderRide.week = tempWeeks?[0] //set the reference for that ride to the first week
    placeholderRide.rideTitle = "New Ride"  // set the title

    rideFilterForSelectedWeek(for: tempWeeks![0]) //set the tempRides array to hold only the
    // rides for the first week in the array (as we always insert the new item into the first week)

    tempRides?.append(placeholderRide) //it is this one that is UPDATING the existing placeholder ride rather than appending on a new one

    self.saveRides()
    }

Как я получить аттракционы из CoreData:

func rideFilterForSelectedWeek(for selectedWeek: TempWeek) {
        let request : NSFetchRequest<TempRide> = TempRide.fetchRequest()
        request.predicate = NSPredicate(format: "week == %@", selectedWeek)
        request.sortDescriptors = [NSSortDescriptor(key: "rideSequenceInWeek", ascending: true)]
        loadRides(with: request)
    }

и загрузки аттракционов:

func loadRides(with request: NSFetchRequest<TempRide> = TempRide.fetchRequest()) {
    do{
        request.sortDescriptors = [NSSortDescriptor(key: "rideSequenceInWeek", ascending: true)]
        tempRides = try context.fetch(request)
    } catch {
    }
}

и функцию saveRides:

func saveRides() {
    do {
        try context.save()
    } catch {
        print("Error saving context \(error)")
    }
    loadRides()
}

1 Ответ

1 голос
/ 06 февраля 2020

... после того, как я работал над этим целую вечность и, наконец, опубликовал вопрос, это были основы - у меня были установлены отношения «Один» вместо «Многие». Поменял что и проблемы решены!

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