ios - 针对特定集合的多对多关系核心数据查询

标签 ios swift core-data

enter image description here

public enum Ability: String {
  case newcomer = "Newcomer"
  case beginner = "Beginner"
  case intermediate = "Intermediate"
  case advanced = "Advanced"
}

public enum Group: String {
  case solo = "Solo"
  case duo = "Duo"
  case team = "Team"
}

我想找到符合以下条件的所有性能。

ability == "Beginner"
group == "Duo"
performers == "Jane Davies" && "Alice Evans"

The documentation表明不支持核心数据中的聚合操作,这令人惊讶。此类问题已asked before在这里并建议使用“任何”。

据我了解,“Any”会返回包含“Jane”或“Alice”或“Jane & Alice”的表演,对吗?我只想要包含“Jane & Alice”的表演。

如何为这个查询编写谓词?

谢谢

最佳答案

对于(不同的)Performer 对象的列表,以下谓词应该有效 找到与这些对象完全相关的所有 Performance 对象 表演者:

let perf1 = ... // Performer object for "Jane Davies"
let perf2 = ... // Performer object for "Alice Evans"
let list = [perf1, perf2]

let predicate = NSPredicate(format: "performers.@count = %ld AND ALL performers in %@", list.count, list)

但显然不是。解决方法是使用子查询:

let predicate = NSPredicate(format: "performers.@count = %ld AND SUBQUERY(performers, $p, $p in %@).@count = %ld",
      list.count, list, list.count)

关于ios - 针对特定集合的多对多关系核心数据查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47000763/

相关文章:

ios - uitableview 重新加载数据缓存?

ios - Swift 3 Xcode 8 Collection View 使用分段控件重新加载数据

swift - 如何使用父类(super class)中声明的方法返回子类的实例?

arrays - 有没有办法从 NSManagedObject 数组中获取特定属性的字符串数组

ios - Firebase 查询相等(toValue :) not working

ios - 调整 TableView 动态内容的行数

javascript - jQuery Ajax 在 cordova iOS 应用程序上发送之前触发成功

ios - 类不覆盖 Storyboard

objective-c - 我如何构建这个 SUBQUERY NSPredicate?

iphone - 在核心数据中序列化 "int"的数组