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 都对您尝试修改的集合有效。
希望这对您有所帮助!
我会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 都对您尝试修改的集合有效。
希望这对您有所帮助!