子查询谓词核心数据

时间:2015-04-06 10:28:06

标签: ios entity-framework core-data

我有两个实体模型"内容"和#34; LessonsContent"与他们之间没有任何关系。两个实体都有共同的属性" contentID" NSNumber类型。我正在从" Content"中获取所有内容对象。给定谓词的实体并将这些对象存储在内容数组中。我成功了。 现在,我想从" LessonsContent"中获取所有的课程对象。 contentIds存在于contents数组中的实体。

我正在使用以下代码:

    NSPredicate * predicate = [NSPredicate predicateWithFormat:@"(contentType == %@)", @"Games"];


    NSError * error;
    NSFetchRequest * request = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([Content class])];
    [request setPredicate:predicate];
    [request setReturnsObjectsAsFaults:NO];
    NSArray *contents = [[DELEGATE managedObjectContext] executeFetchRequest:request error:&error];

    if(error){ NSLog(@"Error in fatching data");}


    //predicate = [NSPredicate predicateWithFormat:@"Content.contentID IN %@", contents];

    predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(contents, $x, $x.Content.contentID IN %@).@count != 0)",contents];

    request = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([LessonsContent class])];
    [request setPredicate:predicate];
    NSArray * mappingArray = [[DELEGATE managedObjectContext] executeFetchRequest:request error:&error];
    NSLog(@"mappingArray %@", mappingArray);

但是app崩溃了。请建议适当的解决方案 提前致谢。

1 个答案:

答案 0 :(得分:0)

您必须首先获得一系列contentID。然后使用IN。

NSArray *contents = [[DELEGATE managedObjectContext] executeFetchRequest:request error:&error];

NSArray * allContentIDs = [contents valueForKey:@"contentID"];

然后使用第二个谓词

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"contentID IN %@", allContentIDs];

[request setPredicate:predicate];

希望这有帮助。