CoreData - 一对多关系

CoreData - One-to-many relationship

我会post下面的代码然后解释我的挣扎

此功能节省一天(如星期日、星期一、星期二等):

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 中的每一天。

这是我的 2 个模型:

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 标题下 "To-Many Relationships"。

这是一个简短的例子。首先,我建议将您的关系名称更改为更直观的名称。这真的有帮助:

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 object 会自动将 details 添加到其 trainingDetails 集合中。

如果您尝试将 object 添加到 TrainingDay 中的 trainingDetails 集,您需要使用我链接的文档中描述的 mutableSetValueForKey: 方法到。基本上,它看起来像这样:

var details = trainingDay1.mutableSetValueForKey("trainingDetails")
details.addObject(newTrainingDetails)

mutableSetValueForKey: 创建代理 object。对集合所做的任何更改 returns 都对您尝试修改的集合有效。

希望这对您有所帮助!