2013-07-21 3 views
0

Я пытаюсь позвонить из Core Data, все, что связано с определенной категорией. Приложение, как это:Исходные данные на основе отношений сущностей

  • Выберите категорию
  • Нажмите вопрос подкатегории
  • рассматривать вопрос

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

Я передаю выбор категории из списка категорий, но я не уверен, что с ним делать, и как я должен звонить из Core Data. У меня есть это в настоящее время (опять же, он возвращает все вопросы): NSEntityDescription *entity = [NSEntityDescription entityForName:@"Question" inManagedObjectContext:[appDelegate managedObjectContext]];

Категории и вопросы имеют обратную связь в модели данных. Должен ли я использовать предикаты, NSRelationshipDescription или что-то еще?

+1

Как выглядит ваша модель данных? Существуют ли отдельные управляемые объекты для категории, подкатегории и вопроса? – bbarnhart

+0

@bbarnhart Да, отдельные объекты, с отношениями между ними. –

ответ

0

Не можете ли вы получить доступ к NSSet вопросам? т.е. category.questions

Чтобы ответить на ваш вопрос о предикате:

Если вы ищете, чтобы найти все Questions для конкретного Category вам нужно будет указать, что Category в вашем NSPredicate

Что-то вроде:

(NSArray *)findQuestionsForCategory:(Category *)category { 
NSFetchRequest *fetch = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Question" inManagedObjectContext:[appDelegate managedObjectContext]]; 
[fetch setPredicate:[NSPredicate predicateWithFormat:@"question.category == %@", category]]; 

... execute fetch request, handle possible errors ... 

} 
0

Использование NSPredicate (при условии, что вы используете традиционный шаблон Master-Detail UITableView и раскадровки) :

// In CategoryViewController 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([[segue identifier] isEqualToString:@"categorySelect"]) 
    { 
     Category *category; 
     category = [categories objectAtIndex:[self.tableView indexPathForSelectedRow].row]; 
     [segue.destinationViewController setParentCategory:category]; 
    } 
} 

// In QuestionViewController with @property parentCategory 
- (void)viewDidLoad 
{ 
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Question" inManagedObjectContext:managedObjectContext]; 
    [fetchRequest setEntity:entity]; 

    // Create predicate 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(category == %@)", self.ParentCategory]; 
    [fetchRequest setPredicate:predicate]; 

    NSError *error; 
    questions = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 
}