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

how to create a set of MPMediaPropertyPredicate joined by OR rather than AND

我想向 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 显然只有一个标识符)

想法?

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

When you apply more than one predicate to a query, the query combines them using the logical AND operator.

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