HowTo为对象创建谓词深入几个关系?核心数据iOS Swift

我有一个相当棘手的问题,我还没有找到答案,并希望你能帮忙!我的情况是这样的:我在Core Data中有以下对象模型

场景< - >>字符< - >>线条

实体具有以下关系:Scenes-> tocharacters-> Characters-> toLines-> Lines

我想要完成的是获取所有存在实际拥有线条的角色的场景.

我读过的每篇文章都只谈到了“走图”这个问题,而且这个工作有效,但并不是一直到有线实体.

例如,这个谓词工作正常,深入一级并检索包含字符的所有场景:

let scene_ent:NSEntityDescription = NSEntityDescription.entityForName("Scenes",inManagedobjectContext: context)

    scenerequest.entity = scene_ent

    let predicate:nspredicate = nspredicate(format: "tocharacters.@count > 0")        
    scenerequest.predicate = predicate

当我尝试修改谓词而不是检索包含具有行的字符的所有场景时:

let predicate:nspredicate = nspredicate(format: "tocharacters.Characters.toLines.@count > 0")

我收到错误’Unsupported function expression count:(tocharacters.Characters.toLines)’

在这里缺少一些非常简单的东西吗?

谢谢!

解决方法

谓词中的关键路径仅使用关系,而不使用实体名称
nspredicate(format: "tocharacters.Characters.toLines.@count > 0")

应该

nspredicate(format: "tocharacters.toLines.@count > 0")

但这可能也行不通.这可能有用(目前无法测试):

nspredicate(format: "ANY tocharacters.toLines.@count > 0")

而且我很确定这会奏效:

nspredicate(format: "SUBQUERY(tocharacters,$c,$c.toLines.@count > 0).@count > 0")

更新:正确的解决方案是

nspredicate(format: "SUBQUERY(tocharacters,ANY $c.toLines != NULL).@count > 0")

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...