Я пытаюсь получить данные из моего отношения «один-много», однако я не могу получить доступ к их значениям, пока не приведу данные выборки к массиву.
Мои отношения таковы:
Я сохраняю как:
@IBAction func saveButton(_ sender: UIButton) {
print("save")
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
let context = appDelegate.persistentContainer.viewContext
let workout = Workout(context: context)
workout.name = workoutName.text
workout.noOfSets = Int16(setsStepper.value)
for index in 0..<setsVal {
let sets = Sets(context: context)
let test = IndexPath(row: index, section: 0)
let cell = tableView.cellForRow(at: test) as! RepsTableViewCell
sets.repAmount = Int16(cell.repsStepper.value)
print(sets.repAmount)
workout.addToSets(sets)
}
try! context.save()
}
Я получаю так:
func fetch() {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return
}
let context = appDelegate.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Workout")
do {
let result = try context.fetch(request)
for index in result as! [Workout] {
print(index.value(forKey: "name") as! String)
print(index.value(forKey: "noOfSets") as! Int16)
/* This line throws error */
/* Cast from 'NSSet?' to unrelated
type '[Sets]' alwaysfails */
for ind in index.sets as! [Sets] {
print(ind.repAmount)
}
}
}
catch {
print("failed")
}
}
Я не уверенпочему index.sets имеет тип NSSet.Сгенерированные свойства базовых данных включают:
extension Workout {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Workout> {
return NSFetchRequest<Workout>(entityName: "Workout")
}
@NSManaged public var name: String?
@NSManaged public var noOfSets: Int16
@NSManaged public var sets: NSSet?
}
// MARK: Generated accessors for sets
extension Workout {
@objc(addSetsObject:)
@NSManaged public func addToSets(_ value: Sets)
@objc(removeSetsObject:)
@NSManaged public func removeFromSets(_ value: Sets)
@objc(addSets:)
@NSManaged public func addToSets(_ values: NSSet)
@objc(removeSets:)
@NSManaged public func removeFromSets(_ values: NSSet)
}
Я не уверен, почему автоматически сгенерированные свойства базовых данных содержат типы NSSet.
Есть ли способ для меня привести индекс.sets к массиву, чтобы я мог получить доступ к отдельным значениям набора, принадлежащим указанной тренировке в предыдущем цикле for (индекс в результате)?