NSPredicate从实体中获取子对象

时间:2013-11-19 20:20:39

标签: objective-c core-data nspredicate nsfetchedresultscontroller

我有一个包含两个实体的简单数据模型。名为Character的父实体和名为Statiscis的子实体。一个角色可以有多个统计数据,每个统计数据只能有一个父数据,所以关系是多对一的。

Data model

从显示字符详细信息的视图控制器中,我调用新的表VC列出与此字符相关的所有统计信息。在这个控制器上,当我尝试构建fetchedResultsController时,我有一个很好的SIGABRT:“无法为谓词生成SQL(character == currentCharacter)(RHS上的问题)”。

当我创建表VC时,我通过prepareForSegue上的两个属性(相同名称)发送managedObjectContext和详细信息VC上显示的字符,因此在表中VC self.currentCharacter承载一个Character受管对象的实例。

#pragma mark - NSFetchedResultsController
- (NSFetchedResultsController *)fetchedResultsController
{
    if (_fetchedResultsController != nil)
    {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Statistic"];

    // Stupid predicate :(
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"character == self.currentCharacter"];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"statName"
                                                                   ascending:YES];
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    [fetchRequest setSortDescriptors:sortDescriptors];

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                                                  managedObjectContext:self.managedObjectContext
                                                                                                    sectionNameKeyPath:nil
                                                                                                             cacheName:nil];
    self.fetchedResultsController = theFetchedResultsController;

    NSError *error = nil;
    // Going to crash
    if (![self.fetchedResultsController performFetch:&error])
    {
        NSLog(@"Core Data error: %@, %@", error, [error localizedDescription]);
        abort();
    }

    return _fetchedResultsController;
}

不知道如何创建谓词,我尝试了几种不成功的方法

2 个答案:

答案 0 :(得分:5)

也许:     [NSPredicate predicateWithFormat:@“character ==%@”,self.currentCharacter];

答案 1 :(得分:3)

你想要

 fetchRequest.predicate = [NSPredicate predicateWithFormat:@"character == %@", self.currentCharacter];