ios谓一对多

时间:2014-05-06 07:07:27

标签: ios core-data predicate

我的核心数据模型中有2个表。

ITEM和FILTER

FILTER有很多项目

我正在尝试使用表FILTER的参数获取所有项目,isSelected == 1.

我有这个谓词,但它没有用,你能帮我解决一下如何得到我想要的东西吗? 我正在使用MagicalRecord

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"filter.isSelected == 1"];
NSArray *items = [Item MR_findAllWithPredicate:predicate];

self.itemList = [items copy];

3 个答案:

答案 0 :(得分:2)

试试这个,我在我的应用程序中为Item和Department做同样的事情。

Filter *department=nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Filter" inManagedObjectContext:__managedObjectContext];
[fetchRequest setEntity:entity];

Item *anItem=nil;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:__managedObjectContext];
[fetchRequest setEntity:entity];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isSelected==%d and isSelected==%@", [department.isSelected integerValue ], @"1"];
[fetchRequest setPredicate:predicate];

NSArray *resultSet = [UpdateManager executeForContext:self.managedObjectContext FetchRequest:fetchRequest];

resultSet是结果数组。

试着让我知道。

答案 1 :(得分:2)

您可以先获取isSelected值为1的所有过滤器。然后遍历每个过滤器并形成项目数组。以下是代码。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"isSelected == 1"];
NSArray *filters = [Filter MR_findAllWithPredicate:predicate];
NSMutableArray *items = [NSMutableArray array];
for (Filter *filter in filters)
{
    items = [items arrayByAddingObjectsFromArray:filter.items];
}

答案 2 :(得分:0)

我自己修正了错误,现在我知道为什么它给了我一个空数组,当我将它们插入数据库时​​,我没有为每个创建的ITEM设置FILTER对象: - /这是多么愚蠢的错误。但上述两种反应似乎都有效。两者都+ 1,谢谢