子查询谓词核心数据



我有两个实体模型"Content"one_answers"LessonsContent",它们之间没有关系。这两个实体都具有NSNumber类型的公共属性"contentID"。我从给定谓词的"Content"实体中获取所有内容对象,并将这些对象存储在内容数组中。我成功地做到了这一点。现在,我想从"lessonsContent"实体中获取其contentId存在于contents数组中的所有lessonsContext对象。

我正在使用以下代码:

    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);

但应用程序正在崩溃。请提出适当的解决方案。提前谢谢。

您必须首先获得一个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];

希望这能有所帮助。

最新更新