Я работаю над приложением iOS, модель очень проста (папки и документы), но у меня возникают проблемы с ее работой с NSFetchedResultsController.Абстрактные отношения Entity и parent в coredata (NSFetchedResultsController + UITableView)
Приложение использует 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 с моей моделью? Я не хочу удалять обратные отношения из-за дополнительного кода, который мне нужно реализовать.
Спасибо.
Проблема заключается в том, что документы не имеют детей ... – louissmr
Louissmr, И это проблема? Вам не нужно использовать поле 'children' для документов. Это не похоже на то, что это много хранилища, чтобы позволить проложить пар. Если вы хотите, вы можете даже переопределить аксессуры, чтобы исключить установку каких-либо «детей». Наличие отношений в 'AbstractEntity' является хорошим решением проблемы, которую вы указали. Он прост и удобен в использовании. Andrew – adonoho
Спасибо, Андрей. Если я использую отношение детей, я потеряю папки и документы. Я использую эти отношения, чтобы узнать, сколько папок и документов есть в папке. int numFolders = currentFolder.folders.count; int numDocs = currentFolder.documents.count; Вероятно, я буду использовать ваше решение, но я пытаюсь найти лучшее. – louissmr