iPhone 歌曲库查询,已知持久标识符返回 nil
Posted
技术标签:
【中文标题】iPhone 歌曲库查询,已知持久标识符返回 nil【英文标题】:iPhone song library query with known persistentIdentifier returning nil 【发布时间】:2013-05-05 19:11:36 【问题描述】:我正在尝试播放从存储的持久标识符引用的歌曲,但如果我使用存储的值对其应用过滤器,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);
我做错了什么?我已经阅读了文档/示例项目,看起来就是这样。
【问题讨论】:
【参考方案1】:初始化 unsigned long long 常量可能是个问题。尝试为号码添加ULL
后缀:
15991677378153886747ULL
然后将其包装成 NSNumber
文字:
NSNumber *persistentId = @15991677378153886747ULL;
// Identical to: [NSNumber numberWithUnsignedLongLong:15991677378153886747ULL]
【讨论】:
【参考方案2】:我不认为它是零项,而是说它有一个具体的媒体项:
// gives <MPConcreteMediaItem: 0x1dd4d3c0> 15991677378153886747
尝试添加这个,看看是否有任何标题弹出:
NSLog(@"%@", [songs valueForKeyPath:@"title"]);
【讨论】:
我认为您正在查看我的代码的“这种方式有效”部分......这是(1)获取音乐库中所有歌曲列表的“坏”方式,并且(2) 在测试环境中读取已知索引进行调试:)以上是关于iPhone 歌曲库查询,已知持久标识符返回 nil的主要内容,如果未能解决你的问题,请参考以下文章