从一个到多个关系中搜索/检索单个值Core Data Swift

时间:2016-06-10 12:57:56

标签: swift core-data nsarray nspredicate nsset

我的数据设计允许一个用户获得多个选票;每条记录也可以有很多票。我正在大量参与并依赖于这些

来搜索特定元素

enter image description here

在主视图控制器中,我在Record实体上有一个fetch控制器,以及一个插入同一个managedContext的var用户实体(即设备用户)。

假设这没关系,在准备segue到详细视图控制器时,我想传入所选记录(没问题);该记录的所有投票数组(我认为没问题,下面的代码);和(这里是棘手的部分)可选设备用户对该记录的投票(这是我的问题)。

let votesAsSet = record.votes
controller.votes = votesAsSet?.allObjects as? [Vote]

let predicateForUsersVote = NSPredicate(format: "record.votes.user == user")
let thisUsersVoteForThisRecordAsSet = votesAsSet?.filteredSetUsingPredicate(predicateForUsersVote)                

controller.thisUsersVote = thisUsersVoteForThisRecordAsSet!.first as? Vote

我要做的是在核心数据中迭代用户的投票,以便记录的用户与设备用户匹配。

1 个答案:

答案 0 :(得分:1)

由于您的谓词已经在Votes的{​​{1}}集上运行,因此您可以直接使用record属性。但是您必须用设备用户的正确值替换,例如:

user

将此谓词应用于集合的结果也将是一个集合,因此我认为您可能需要使用let predicateForUsersVote = NSPredicate(format: "user == %@", device-user) 而不是.anyObject()来获取相关的.first对象。< / p>