0

我正在尝试从 Core Data 调用与特定类别相关的所有内容。该应用程序是这样的:

  • 点击一个类别
  • 单击子类别问题
  • 查看问题

我已经设置了所有视图,并让合作伙伴设置了 Core Data,但我遇到了一个问题,即无论我选择哪个类别,它仍然总是加载所有问题。

我从类别列表视图传递类别选择,但我不确定如何处理它,以及我应该如何从 Core Data 调用。我目前有这个(同样,它返回所有问题):NSEntityDescription *entity = [NSEntityDescription entityForName:@"Question" inManagedObjectContext:[appDelegate managedObjectContext]];

类别和问题在数据模型中具有反比关系。我应该使用谓词、NSRelationshipDescription 还是其他什么?

4

2 回答 2

0

使用NSPredicate(假设您使用的是传统的 Master-DetailUITableView模式和 Storyboards):

// 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];
}
于 2013-07-22T04:48:35.900 回答
0

你不能只访问NSSet问题吗?IEcategory.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 ...

}
于 2013-07-22T04:03:12.730 回答