2014-02-06 2 views
1

Когда у меня есть две сущности Родитель и ребенок (отношения между - «дети», обратный - «родитель») это просто заводят детей из бетона родителей, см ниже код:CoreData один-ко-многим, используя только один Entity

Parent *parent = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; 

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"Child" inManagedObjectContext:context]]; 
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 

[request setSortDescriptors:@[sort]]; 

[request setPredicate:[NSPredicate predicateWithFormat:@"(parent == %@)", parent]]; 

NSError *error = nil; 
NSArray *results = [context executeFetchRequest:request error:&error]; 
NSLog(@"results :%@", results); 

Да, конечно, я могу получить детей без NSFetchRequest, но в моем случае я должен сделать это таким образом; Хорошо, и моя беда в том, что у меня есть только ОДИН сущность, например «Родитель» (отношения - «родители», обратные - «родители»); и One Parent имеет 3 других родителей; Как получить всех родителей конкретного родителя; Я пытаюсь сделать это:

Parent *parent = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext]; 

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:[NSEntityDescription entityForName:@"Parent" inManagedObjectContext:context]]; 
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 

[request setSortDescriptors:@[sort]]; 

[request setPredicate:[NSPredicate predicateWithFormat:@"(parents == %@)", parent]]; 

NSError *error = nil; 
NSArray *results = [context executeFetchRequest:request error:&error]; 
NSLog(@"results :%@", results); 

Но моя программа программа падает: Нагрузочный приложение из-за неперехваченного исключением «NSInvalidArgumentException», причина: «ко-многим ключевым здесь не допускается»

+0

Показать изображение вашей модели (по крайней мере, сущность). У вас должно быть 2 отношения, которые являются обратными, какие имена? – Wain

+0

Довольно запутанный, скриншот модели данных поможет. – Desdenova

ответ

4

Даже если вы есть только один объект, вам нужно определить два отношения:

  • «родитель», как к-одному от субъекта к самому себе, и
  • «дети», как ко многим из сущности к себе

и сделать их обратные отношения друг к другу. Затем

[NSPredicate predicateWithFormat:@"(parent == %@)", parent] 

должен работать должным образом.

+1

Да, вы правы; Я постараюсь это сделать))) Большое спасибо) –

+0

Martin, что вы думаете о взаимоотношениях «многие-ко-многим» в Core Data? Я думал, и теперь я использую отношения «многие ко многим»; Для лучшего понимания представьте себе друзей facebook, каждый друг может быть другом для многих пользователей, и у него может быть много друзей; Я пытаюсь сделать это с помощью одного объекта и после того, как вы получили конкретного пользователя-пользователя, используя NSFetchRequest –

+0

@ O.Daniel: У меня нет проблем со многими отношениями ко многим. Какой у Вас вопрос? –

Смежные вопросы