核心数据一对多获取数据

时间:2012-03-16 02:33:28

标签: iphone objective-c ios core-data

好的,我在核心数据方面有一对多的关系。一顿饭可以包含许多不同的食物。我的代码似乎不适用于Fetch Controller。我可以自信地说出来,自我意味着我正在尝试的当前膳食。我正在整个申请中分享上下文。

我遇到的问题是应用程序正在显示食物,但它似乎与膳食中的内容不匹配。一旦我添加食物,它会立即显示,即使它不在膳食中。

任何帮助或建议,我正在正确地进行此操作。

- (NSFetchedResultsController *)fetchedResultsController 
{       
    self.context = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 

    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Food" inManagedObjectContext:self.context];

    [fetchRequest setEntity:entity];


    NSPredicate *foodPredicate = [NSPredicate predicateWithFormat:@"meals == %@", self.meal];
    [fetchRequest setPredicate:foodPredicate];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.context sectionNameKeyPath:nil cacheName:@"Root"];


    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;

    [fetchRequest release];
    [theFetchedResultsController release];

    return _fetchedResultsController;
}

2 个答案:

答案 0 :(得分:1)

如果self.mealsnil,那么NSFetchedResultsController将返回Food不属于Meal的{​​{1}},从而解释您的行为&#39}注意到。

答案 1 :(得分:0)

您的谓词不正确。您不应该将meals NSSet Mealmeal个对象与单个meals进行比较。您需要查看Food对象上的 [NSPredicate predicateWithFormat:@"%@ in meals", self.meal] 设置是否包含该餐。

{{1}}