0

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

Спасибо.

ответ

0

Louissmr,

Вы говорите,

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

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

Эндрю

+0

Проблема заключается в том, что документы не имеют детей ... – louissmr

+0

Louissmr, И это проблема? Вам не нужно использовать поле 'children' для документов. Это не похоже на то, что это много хранилища, чтобы позволить проложить пар. Если вы хотите, вы можете даже переопределить аксессуры, чтобы исключить установку каких-либо «детей». Наличие отношений в 'AbstractEntity' является хорошим решением проблемы, которую вы указали. Он прост и удобен в использовании. Andrew – adonoho

+0

Спасибо, Андрей. Если я использую отношение детей, я потеряю папки и документы. Я использую эти отношения, чтобы узнать, сколько папок и документов есть в папке. int numFolders = currentFolder.folders.count; int numDocs = currentFolder.documents.count; Вероятно, я буду использовать ваше решение, но я пытаюсь найти лучшее. – louissmr