Я работаю над приложением для 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 с моей моделью? Я не хочу удалять обратные отношения из-за дополнительного кода, который мне нужно реализовать.
Спасибо.