Получить родительско-дочерний массив из coredata - PullRequest
1 голос
/ 22 июля 2011

У меня есть модель CoreData, которая может содержать бесконечное число детей.И я хочу отобразить список каждого объекта с отступом для удобочитаемости, например,

Object
  Object first child
    first childs children
    first child children
  Object second child
Object 2
  Object also has children
  MOre children
    Childs

Теперь я пришел из PHP фона.и в PHP я бы создал простой массив, который я переберу с некоторыми функциями для построения этого списка, но мне все равно это кажется глупо трудным.

Я получил плоский массив, в котором в основном есть такие элементы: array.name =@"Название";array.children = nil или строки coredata array.parent = nil или строка coredata

Как мне пройти по этому пути и отобразить список с отступом и сгруппированный, как указано выше.

Спасибо за любые указатели или примеры.

- Завершено указателями ниже: результирующий код выглядит следующим образом:

Полученный код (аналогично следующему, яУ меня есть свои настройки, но это специфика)

- (NSArray *)flattenGroupsWithParent:(NSManagedObject<ECCGroup> *)parent {
    //findGroupsForGroups gets all nodes with parent: parent.
    NSArray *children = [dataSource findGroupsForGroup:parent];
    for (NSManagedObject<ECCGroup> *child in children) {
        ECCGroupNode *node = [[ECCGroupNode alloc] initWithGroup:child label:child.name];
        [result addObject:node];
        [result addObjectsFromArray:[self flattenGroupsWithParent:child]];
        [node release];
    }
}

Результирующий массив: результат.содержит массив, по порядку.со всеми родителями -> детьми.В моем случае с отступом, где требуется.(с использованием дополнительных параметров, не показанных выше)

1 Ответ

0 голосов
/ 22 июля 2011

Вы начинаете с модели данных с одним объектом, который будет выглядеть примерно так:

Node{
  name:string
  parent<<-->Node.children
  children<-->>Node.parent
}

Для использования вы должны сделать выборку для всех Node объектов, чье отношение parent было равно нулю. Это были бы ваши объекты верхнего уровня. Чтобы найти объекты следующего уровня, вы просто запросите атрибут children каждого объекта верхнего уровня.

Вы делаете отступ строк, используя метод tableView:indentationLevelForRowAtIndexPath: UITableviewDelegate. В этом случае вы бы рассчитали отступ для каждой строки, взяв каждый объект узла, а затем рекурсивно пройдя его родительские отношения до самого верха и посчитав шаги.

Тем не менее, в iOS, отступы от просмотра таблиц не приветствуются. Если вы нацелены на iPhone, просмотр таблицы с отступом почти бесполезен, потому что у вас недостаточно области экрана, чтобы увидеть полезное количество таблицы. Вместо этого используйте контроллер навигации, чтобы отобразить иерархию табличных представлений, каждое из которых отображает свой уровень иерархии данных.

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