Как поместить все связанные объекты, связанные с самими собой, в представление таблицы с соответствующим заголовком раздела для каждого сопоставления отношений? - PullRequest
1 голос
/ 08 мая 2020

У меня есть сущность под названием «Навык». Навык имеет сопоставление отношений для трех разных типов - более простого, сложного и аналогичного.

enter image description here

Я хочу создать табличное представление, используя 3 раздела - проще, сложнее и аналогично для конкретного навыка, который я просматривал. Я пытаюсь определить, как создать запрос на выборку с помощью NSFetchedResultsController, чтобы собрать все три этих навыка в один. Вот моя попытка

fileprivate lazy var relatedSkillsFetchedResultsController: NSFetchedResultsController<Skill> = {
        let appDelegate =
            UIApplication.shared.delegate as? AppDelegate
        let managedContext =
            appDelegate?.persistentContainer.viewContext
        let request: NSFetchRequest<Skill> = NSFetchRequest(entityName: "Skill")
        request.predicate = NSPredicate(format: "%@ IN self.easier OR %@ IN self.harder OR %@ IN self.similar", skill!,skill!,skill!)
        let skillFetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: managedContext!, sectionNameKeyPath: #keyPath(skill.relationshipFetchName), cacheName: nil)
        return skillFetchedResultsController
    }()

Я подумал - так как «легче» обратное «сложнее» и «сложнее» обратное «проще», а «подобное '' обратное аналогичному…. Я могу получить оригинал отдельно, иначе. ... затем выберите все навыки с предикатом, что основной навык находится в тех навыках, которые сложнее, проще или похожи.

Похоже, это правильный способ сделать это?

Я тоже не знаю, как установить sectionNameKeyPath. По сути, он будет соответствовать какому из трех NSPredicate OR, которые он соответствует, правильно?

1 Ответ

1 голос
/ 09 мая 2020

Сложность с настройкой FR C заключается не столько в нахождении sectionNameKeyPath, хотя это может быть сложно, сколько в получении дескриптора сортировки, который согласуется с желаемыми разделами: дескрипторы сортировки, совместимые с выборкой запроса относительно ограничены.

В вашем случае у меня возникнет соблазн создать только одну рефлексивную связь между навыком и самим собой (relatedSkills), но добавить целочисленный атрибут к сущности навыка, чтобы представить difficulty. Вы можете выбрать шкалу (например, 0-9, 0-99 и т. Д.) И решить, насколько близка должна быть сложность (например, +/- 1 или +/- 2 и т. Д. c) для двух навыков, чтобы

Затем вы можете использовать предикат, чтобы выбрать только те навыки, которые связаны с выбранным вами навыком:

NSPredicate(format:"ANY relatedSkills == %@", chosenSkill)

и добавить дескриптор сортировки на основе difficulty. Затем определите функцию для определения (используя правила, которые вы выберете), является ли данный Навык «проще», «похожим» или «сложнее». Эта функция будет вашим sectionNameKeyPath.

Обновление

Ну, поразмыслив за ночь, я понял, что был неправ. В приведенном выше сценарии sectionNameKeyPath - это сложный бит: проблема в том, что он зависит от текущего выбранного навыка, но функция не может принимать никаких параметров, поэтому не может «знать», какой навык является текущим выбранным. Вернуться к чертежной доске ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...