首页 文章

核心数据 - 以一对多关系分配值

提问于
浏览
1

我会发布一些代码然后解释我需要什么 .

两种型号:

import Foundation
import CoreData

class TrainingDay: NSManagedObject {

    @NSManaged var day: String
    @NSManaged var trainingDetails: NSSet

}

import Foundation
import CoreData

class TrainingDetails: NSManagedObject {

    @NSManaged var exerciseName: String
    @NSManaged var repsNumber: String
    @NSManaged var setsNumber: String
    @NSManaged var trainingDay: TrainingDay

}

好的,现在我在这里有这些方法:

func appendTrainingDay() {
        let dayLabel = dayName.text
        let dayEntity = NSEntityDescription.entityForName("TrainingDay", inManagedObjectContext: moc!)
        let newTrainingDay = TrainingDay(entity: dayEntity!, insertIntoManagedObjectContext: moc)
        newTrainingDay.day = dayName.text

        var error: NSError?
        moc?.save(&error)

        if let err = error {
            var status = err.localizedFailureReason
            println("\(status)")
        } else {
            println("Training day:\(dayName.text)")
    }
}

func appendTrainingDetailsToArray () {
        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("Training day:\(trainingdetails)")
            println("Exercise: #\(exerciseName.text) saved successfully!")
            println("Number of sets: #\(setsNumber.text) saved successfully!")
            println("Number of reps: #\(repsNumber.text) saved successfully!")
        }
    }

他们在这里被触发:

@IBAction func fixDayButton(sender: AnyObject) {
        appendTrainingDay()
    }


    @IBAction func doneButton(sender: AnyObject) {
        appendTrainingDetailsToArray()
        exerciseTableView.reloadData()
    }

完成后,它应该做的是:用户将打印一天,如“星期一”,将其保存到核心数据中,并且在特定的一天,用户将根据需要添加许多详细信息对象,这将填充一个tableView . 这些对象中的每一个都包含3个属性:“exerciseName”,“repsNumber”和“setsNumber” . 例如,正在发生的事情不是创建单个“星期一”对象,而是将许多细节对象添加到已存在的对象中,我创建了许多“星期一”,并且对于每个“星期一”,我创建了一个细节对象 .

我怎样才能解决这个问题?如何在将保存核心数据中的详细信息的方法中,为我想要的特定日期进行获取并使用尽可能多的对象填充它?

  • 我已经设置了一对多关系并在它们之间进行反转 .

  • 我不知道如何使用匹配我想要搜索的谓词来制作正确的获取请求 .

  • 我是Swift的新手,对C只有一点经验 .

如果有人可以通过示例向我解释如何做到这一点,我将非常,非常感谢 .

1 回答

  • 1

    设置 trainingdetails.trainingDay 关系 . 除非我错过了什么,否则你永远不会在任

    编辑:

    像这样的东西:

    trainingdetails.trainingDay = selectedTrainingDay
    

    要访问 trainingdetails ,您只需从Core Data中获取当天并执行以下操作:

    foreach( TrainingDetails trainingDetails in selectedTrainingDay.trainingDetails) {
       // Do stuff with the trainingDetails
    
    }
    

    如果没有更好地理解用户界面和工作流程,我只是在这里猜测 . 通常这种事情会有两个UITableViews - 一个列出日期,当你选择一天时,你会去另一个列出日期训练详细信息 . 在您的情况下,我猜您有一个日历视图,当您从日历视图中选择一天时,您将显示所选日期的培训详细信息列表 .

相关问题