我将发布以下代码然后解释我的挣扎
此函数保存一天(如星期日、星期一、星期二等):
func appendDaysToArray() {
let dayLabel = dayName.text
daysArray.append(dayLabel)
let dayEntity = NSEntityDescription.entityForName("TrainingDay", inManagedObjectContext: moc!)
let trainingday = TrainingDay(entity: dayEntity!, insertIntoManagedObjectContext: moc)
trainingday.day = dayName.text
var error: NSError?
moc?.save(&error)
if let err = error {
var status = err.localizedFailureReason
println("\(status)")
} else {
println("Day #\(dayName.text) saved successfully!")
}
}
这个将详细信息保存为名称、一组数和重复次数(如健身房锻炼):
func appendTrainingDetails () {
let nameLabel = exerciseName.text
namesArray.append(nameLabel)
let numberOfSets = setsNumber.text?.toInt()
setsArray.append(numberOfSets!)
let numberOfReps = repsNumber.text?.toInt()
repsArray.append(numberOfReps!)
let detailsEntity = NSEntityDescription.entityForName("TrainingDetails", inManagedObjectContext: moc!)
let trainingdetails = TrainingDetails(entity: detailsEntity!, insertIntoManagedObjectContext: moc)
trainingdetails.exerciseName = exerciseName.text
trainingdetails.setsNumber = setsNumber.text!
trainingdetails.repsNumber = repsNumber.text!
var error: NSError?
moc?.save(&error)
if let err = error {
var status = err.localizedFailureReason
println("\(status)")
} else {
println("Exercise: #\(exerciseName.text) saved successfully!")
println("Number of sets: #\(setsNumber.text) saved successfully!")
println("Number of reps: #\(repsNumber.text) saved successfully!")
}
}
我的应用程序运行正常,但我真正需要的是:对于每一天,我都会有多个 exerciseNames、setsNumber 和 repsNumber。我设置了一对多的关系,但是我不知道如何将TrainingDetails 归于daysArray 中的每一天。
这是我的两个模型:
import Foundation
import CoreData
class TrainingDay: NSManagedObject {
@NSManaged var day: String
@NSManaged var relationship1: NSSet
}
和
import Foundation
import CoreData
class TrainingDetails: NSManagedObject {
@NSManaged var exerciseName: String
@NSManaged var repsNumber: String
@NSManaged var setsNumber: String
@NSManaged var relationship2: TrainingDay
}
稍后,我会为每一天设置一个按钮,当按下时,它们会更新一个带有特定日期练习列表的 tableView。这就是为什么我需要设置这个一对多的关系。
我怎样才能做到这一点?
如有错误请见谅。提前致谢!!
最佳答案
您想要执行的操作的文档是 in this link ,在“对多关系”标题下。
这是一个简短的例子。首先,我建议将您的关系名称更改为更直观的名称。这真的有帮助:
class TrainingDay: NSManagedObject {
@NSManaged var day: String
@NSManaged var trainingDetails: NSSet
}
class TrainingDetails: NSManagedObject {
// ... other stuff here
@NSManaged var trainingDay: TrainingDay
}
确保您对代码所做的任何更改也在模型图中进行。确保关系在模型图中配置为彼此相反。
您可以像这样为给定的 TrainingDetails
设置 TrainingDay
:
// This assumes you've created a TrainingDay called "trainingDay1", and a
// TrainingDetails object called "details".
details.trainingDay = trainingDay1
Core Data 也负责创建反向关系,因此 trainingDay1
对象会自动将 details
添加到它的 trainingDetails
集中。
如果您尝试将对象添加到 TrainingDay
中的 trainingDetails
集,则需要使用文档中描述的 mutableSetValueForKey:
方法我链接到的。基本上,它看起来像这样:
var details = trainingDay1.mutableSetValueForKey("trainingDetails")
details.addObject(newTrainingDetails)
mutableSetValueForKey:
创建一个代理对象。对它返回的集合所做的任何更改都对您尝试修改的集合有效。
希望对您有所帮助!
关于swift - CoreData - 一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32013330/