Итак, у меня есть объект Core Data, который я пытаюсь отобразить в виде таблицы с помощью NSFetchedResultsController. Соответствующая модель атрибутов выглядит следующим образом:NSFetchedResultsController group group by relation
Сообщение
- parentPost (ОТМ отношение)
- childPosts (обратный parentPost)
- RootParent (ОТМ отношение, указывает на верхней части дерево)
- allChildren (обратная сторона rootParent, показывает сплюснутые дети корневого объекта)
Отношения образуют дерево с корнем Post, являющимся тем местом, где parentPost = nil. Способ, которым я хочу, чтобы это отображалось, заключается в том, что каждый корневой столбец является первым элементом в разделе, а затем остальные строки являются сплющенным списком дочерних элементов корня.
Это достаточно легко организовать вручную, выполнив запрос выборки, как это:
let fetchRequest = NSFetchRequest(entityName: Post.entityName())
fetchRequest.predicate = NSPredicate(format: "parentPost = NULL")
fetchRequest.sortDescriptors = sortOrder.sortDescriptors
fetchRequest.fetchBatchSize = 20
fetchRequest.relationshipKeyPathsForPrefetching = ["allChildren"]
Тогда я могу построить раздел массив из каждого из результатов делать что-то вроде этого:
let sectionPost = self.fetchedResultsController!.fetchedObjects![section] as! Post
var sectionArray = NSMutableArray(object: sectionPost)
var filteredSet = sectionPost.allChildren.filteredOrderedSetUsingPredicate(NSPredicate(format: "approved != FALSE AND postDeleted != TRUE AND spam != TRUE"))
sectionArray.addObjectsFromArray(filteredSet.array)
Вопрос в том, есть ли способ сделать все это внутри FRC? Поддержание отдельного источника данных из FRC является сложным, и я предпочел бы найти способ сделать это с помощью одного запроса выборки, но я не вижу отличного способа обработки этого.
Как добавление выбранного свойства решает проблему? Единственный способ разрезать результаты FRC - это свойство sectionNameKeyPath, и я не вижу, как то, что вы говорите, будет работать. Можете ли вы привести пример? – smyrgl
BTW, я использую Mogenerator для генерации файлов классов, поэтому отношения уже являются ключами объекта Post. Но я до сих пор не вижу, как я могу сделать их в секциях, используя эти свойства. – smyrgl
отредактировал ответ ... –