Основные данные Swift 4 - выборка отношений - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть сущности как:

Сущность 1

Сущность 2

Я сохраняю данные следующим образом:

@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)
        // Does this line not create the relationship between Workout and Set Entities?
        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")
    request.relationshipKeyPathsForPrefetching = ["Sets"]

    do {
        let result = try context.fetch(request)
        for data in result as! [NSManagedObject] {
            print(data.value(forKey: "name") as! String)
            print(data.value(forKey: "noOfSets") as! Int16)
        }
    }
    catch {
        print("failed")
    }
}

Я установил отношения между сущностями Workout и Sets как один-много, но не могу получить атрибуты Set из Workout.

Как получить атрибуты отношения сущностей?

Нужно ли указывать отношение программно, несмотря на то, что отношение настраивается в файле xcdatamodel?

Имеет ли Workout.addToSets(устанавливает) создать отношения между сущностями?

1 Ответ

0 голосов
/ 06 декабря 2018

Вы должны иметь доступ к объектам отношений как к атрибуту, например,

for workout in result as! [Workout] {
    print(workout.name)
    if let sets = workout.sets { //assuming you have name your to-many relationship 'sets'
        print(sets.count)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...