Swift 在尝试将占位符值插入CoreData时避免意外更新

Swift 在尝试将占位符值插入CoreData时避免意外更新,swift,core-data,Swift,Core Data,我有一个简单的应用程序,我试图允许用户在一周内(课程安排)增加乘车。从几周到几次乘车,都有一对多的关系 当用户添加一个新的骑乘时-我想插入一个占位符/虚拟骑乘-我稍后会更新 我遇到的问题是,我在下面创建的“占位符骑乘”虚拟项在第一个实例中运行良好-但从那时起,它实际上是在向数据库添加新骑乘,并将新的骑乘映射到正确的一周-但它会取消先前添加的骑乘的引用-因此最终结果是每周最多插入一次骑乘(尽管DB最终会有很多孤立的骑乘!)。即使在应用程序重启之后 显然,这个问题与这个占位符有关,它不是每次调用函数

我有一个简单的应用程序,我试图允许用户在一周内(课程安排)增加乘车。从几周到几次乘车,都有一对多的关系

当用户添加一个新的骑乘时-我想插入一个占位符/虚拟骑乘-我稍后会更新

我遇到的问题是,我在下面创建的“占位符骑乘”虚拟项在第一个实例中运行良好-但从那时起,它实际上是在向数据库添加新骑乘,并将新的骑乘映射到正确的一周-但它会取消先前添加的骑乘的引用-因此最终结果是每周最多插入一次骑乘(尽管DB最终会有很多孤立的骑乘!)。即使在应用程序重启之后

显然,这个问题与这个占位符有关,它不是每次调用函数时创建的“新”项,而是更新它

我肯定我错过了显而易见的——但我应该做些什么来每次插入一个空白的新骑乘?如果我想插入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 {
    }
}
func saveRides() {
    do {
        try context.save()
    } catch {
        print("Error saving context \(error)")
    }
    loadRides()
}