如何创建一组由OR而不是AND连接的MPMediaPropertyPredicate

时间:2015-11-17 15:41:09

标签: ios objective-c nspredicate mpmediaquery

我想向MPMediaQuery添加一系列谓词,但我希望使用OR汇总,而不是AND:

MPMediaQuery *q = [MPMediaQuery songsQuery];
NSMutableArray *a = [@[] mutableCopy];
for (DFLocalMediaItem *item in self.offlineItems) {
    MPMediaPropertyPredicate* p = [MPMediaPropertyPredicate predicateWithValue:item.identifier
                                                                           forProperty:MPMediaItemPropertyPersistentID];
    [a addObject:p];
}
NSSet *s = [NSSet setWithArray:a];
[q setFilterPredicates:s];

当我创建这个集合时,它使用AND聚合上面的MPMediaPropertyPredicate(显然它不会起作用......因为单个MPMediaItem显然会有一个标识符)

想法?

1 个答案:

答案 0 :(得分:2)

由于公共API,您无法拥有此类功能。 official docs表示

  

当您对查询应用多个谓词时,查询会使用逻辑AND运算符组合它们。

但是如果你想从你的项目中构建一个MPMediaItemCollection,你可以构造一个类似于MPMediaQuery结构的数组,它具有相同的方法,但后面有静态数组。