У меня есть простое приложение, в котором я пытаюсь разрешить пользователю добавлять поездки в неделю (расписание занятий). От недели к поездке существует отношение «Один ко многим».
Когда пользователь добавляет новую поездку - я хочу вставить поездку с заполнителем / фиктивной - которую я позже обновлю.
у меня есть проблема в том, что фиктивный элемент 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()
}