Swift 在尝试将占位符值插入CoreData时避免意外更新
我有一个简单的应用程序,我试图允许用户在一周内(课程安排)增加乘车。从几周到几次乘车,都有一对多的关系 当用户添加一个新的骑乘时-我想插入一个占位符/虚拟骑乘-我稍后会更新 我遇到的问题是,我在下面创建的“占位符骑乘”虚拟项在第一个实例中运行良好-但从那时起,它实际上是在向数据库添加新骑乘,并将新的骑乘映射到正确的一周-但它会取消先前添加的骑乘的引用-因此最终结果是每周最多插入一次骑乘(尽管DB最终会有很多孤立的骑乘!)。即使在应用程序重启之后 显然,这个问题与这个占位符有关,它不是每次调用函数时创建的“新”项,而是更新它 我肯定我错过了显而易见的——但我应该做些什么来每次插入一个空白的新骑乘?如果我想插入10个新的游乐设施,我实际上是插入它们,而不是插入一个新行,而是覆盖现有的关系,这样只有一行与本周有关系Swift 在尝试将占位符值插入CoreData时避免意外更新,swift,core-data,Swift,Core Data,我有一个简单的应用程序,我试图允许用户在一周内(课程安排)增加乘车。从几周到几次乘车,都有一对多的关系 当用户添加一个新的骑乘时-我想插入一个占位符/虚拟骑乘-我稍后会更新 我遇到的问题是,我在下面创建的“占位符骑乘”虚拟项在第一个实例中运行良好-但从那时起,它实际上是在向数据库添加新骑乘,并将新的骑乘映射到正确的一周-但它会取消先前添加的骑乘的引用-因此最终结果是每周最多插入一次骑乘(尽管DB最终会有很多孤立的骑乘!)。即使在应用程序重启之后 显然,这个问题与这个占位符有关,它不是每次调用函数
@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()
}