核心数据:按多对数关系排序

ave*_*ged 11 iphone cocoa core-data nsfetchedresultscontroller

我目前正在尝试设置一个NSFetchedResultsController,它将根据多对多关系中的实体数量来命令我的表视图.我不确定这在计算时是否有所不同,但这也是一种反比关系.

我觉得这样的东西会很好用:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Parent"
inManagedObjectContext:managedObjectContext];

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] 
initWithKey:@"children.@count" ascending:YES];

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1,
nil];

[fetchRequest setSortDescriptors:sortDescriptors];
Run Code Online (Sandbox Code Playgroud)

我不断得到'Keypath包含KVC聚合物,而不应该有一个; 未能处理孩子.@ count'.

什么可能出错?

num*_*ist 5

从 iOS 13(和朋友)开始,您可以创建一个使用派生表达式调用的派生属性,然后设置childCountchildren.@countfetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"childCount" ascending:NO]]


Nik*_*rns -1

我最终在我的实体中添加了一个计数属性,每当添加新关系时我都会增加它。使 fetchedResultsController 更易于使用。

如果您找到了使用 KVC 的方法,请感兴趣。我从来不需要修复这个黑客行为。

像这样的东西可能有用:

entity *match;    
match = (entity *)[objects objectAtIndex:0];
        NSSet *t = [match valueForKey:@"entity"]; 
        if(![t containsObject:newEntity]){
            int newCount = [match.count intValue] +1;
        [match addEntityObject:newEntity];
            [match setCount:[NSNumber numberWithInt:newCount]];
Run Code Online (Sandbox Code Playgroud)