0

我正在尝试播放从存储的持久标识符引用的歌曲,但如果我使用存储的值对其应用过滤器,MPMediaQuery 将返回 0 结果。

我的无效过滤版本代码:

NSNumber *persistentId = [NSNumber numberWithLongLong:15991677378153886747];
MPMediaPredicate *filter = [MPMediaPropertyPredicate predicateWithValue:persistentId forProperty:MPMediaItemPropertyPersistentID];
MPMediaQuery *songQuery = [[MPMediaQuery alloc] initWithFilterPredicates:[NSSet setWithObject:filter]];
NSArray *songs = [songQuery items]; // [songs count] is zero here

尽管songs包含应该通过此过滤器的 MPMediaItem,但我却得到零个项目返回。检查一下(做得不好):

MPMediaQuery *songQuery = [[MPMediaQuery alloc] init];
NSArray *songs = [songQuery items];

 // gives <MPConcreteMediaItem: 0x1dd4d3c0> 15991677378153886747
NSLog(@"%@", [songs objectAtIndex:5]); 

 // gives 15991677378153886747
NSLog(@"%@", persistentId);

我究竟做错了什么?我已经阅读了文档/示例项目,看起来就是这样做的。

4

2 回答 2

0

初始化 unsigned long long 常量可能是个问题。尝试ULL为数字添加后缀:

15991677378153886747ULL

然后将其包装成NSNumber文字:

NSNumber *persistentId = @15991677378153886747ULL;
// Identical to: [NSNumber numberWithUnsignedLongLong:15991677378153886747ULL]
于 2013-05-10T19:35:02.330 回答
0

我不认为它是零项目,而是说它有一个具体的媒体项目:

// gives <MPConcreteMediaItem: 0x1dd4d3c0> 15991677378153886747

尝试添加这个,看看是否有任何标题弹出:

NSLog(@"%@", [songs valueForKeyPath:@"title"]);
于 2013-09-13T00:39:14.387 回答