Абстрактная сущность и родительские отношения в coredata (NSFetchedResultsController + UITableView) - PullRequest
0 голосов
/ 09 марта 2012

Я работаю над приложением для iOS, модель очень проста (папки и документы), но у меня возникают проблемы с настройкой его работы с NSFetchedResultsController.

Приложение использует UITableView в NavigationController для отображения списка папок и документов, содержащихся в папке. Пользователь может просматривать иерархию папок с эффектом детализации. Кроме того, пользователь может копировать / вставлять папки и документы, поэтому у любого документа или папки может быть много родителей.

Это моя текущая модель:

AbstractElement{
    elementName:string
}

Folder{
    parents<<---->>Folder.folders
    folders<<---->>Folder.parents
    documents<<---->>Document.parents
}

Document{
    numPages:int
    parents<<---->>Folder.documents
}

Эта модель работает нормально, если я заполняю UITableView NSArray, созданным из текущей папки:

NSArray * currentListOfElements = 
      [[self.currentFolder.documents sortedArrayUsingDescriptors:descriptors] 
      arrayByAddingObjectsFromArray:
      [self.currentFolder.folders sortedArrayUsingDescriptors:descriptors]];

Проблема в том, что мне нужно заполнить UITableView из NSFetchedResultsController, получая папки и документы с помощью одного NSFetchRequest. Решение что-то вроде этого:

NSEntityDescription *entity = [NSEntityDescription 
                               entityForName:@"AbstractElement" inManagedObjectContext:self.context];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"%@ IN self.parents", self.currentFolder]];

...create the NSFetchedResultsController using fetchRequest...

Но это не работает, потому что AbstractElement не имеет "родительских" отношений.

Если я перевожу родительское отношение из Папки и Документа в AbstractElement, проблема заключается в том, как установить обратное отношение:

AbstractElement{
    elementName:string
    parents<<---->> ??
}

Folder{
    folders<<---->>Folder.parents
    documents<<---->>Document.parents
}

Document{
    numPages:int
}

Это правильный подход? Как я могу использовать NSFetchedResultsController с моей моделью? Я не хочу удалять обратные отношения из-за дополнительного кода, который мне нужно реализовать.

Спасибо.

1 Ответ

0 голосов
/ 10 марта 2012

Louissmr,

Вы говорите,

... пользователь может копировать / вставлять папки и документы, поэтому любой документ или папка может иметь много родителей.

Следовательно, что плохого в том, чтобы иметь отношения 2 ко многим в AbstractElement. Позвоните им, скажем, parents и children. Это соответствует вашим критериям. Каждый является противоположностью другого.

Andrew

...