我正在使用以下代码循环播放 iPhone 音乐库中的所有歌曲:
NSArray * songs = [[NSArray alloc] initWithArray:[[MPMediaQuery songsQuery] collections]];
for (MPMediaItemCollection * item in songs){
NSString * persistentID = [[[item representativeItem] valueForProperty:MPMediaItemPropertyPersistentID] stringValue];
// Do something with it.
}
[songs release];
很基本的东西。
我得到 PersistentID 是NSString
因为我需要将它写入 XML 文件(以便通过网络传输到另一台设备)。因此,我不能将其保留为NSNumber
.
然后,另一台设备将通过再次传回 PersistentID 来要求 iPhone 播放曲目。
此时,iPhone 有一个NSString
它应该播放的曲目的 PersistentID。
再次循环播放每首歌曲并比较 PersistentID 直到找到我想要的曲目会很麻烦,所以我尝试使用MPMediaPropertyPredicate
iPhone 搜索我。
我正在使用以下代码进行搜索:
MPMediaPropertyPredicate * predicate = [MPMediaPropertyPredicate predicateWithValue:persistentID forProperty:MPMediaItemPropertyPersistentID];
MPMediaQuery * songsQuery = [[MPMediaQuery alloc] init];
[songsQuery addFilterPredicate:predicate];
if ([[songsQuery items] count]){
MPMediaItem * item = [[songsQuery items] objectAtIndex:0];
// Play item.
}
[songsQuery release];
较早persistentID
的从哪里来。NSString
奇怪的是,这适用于某些歌曲,而不适用于其他歌曲。即,有时items
数组不是空的,即使我传递的是一个NSString
,而不是一个NSNumber
。
我想知道是否有办法将我的NSString
背部转换为NSNumber
它的来源,以及我该如何做到这一点。
更新:我试过 NSNumberFormatter,我也试过类似的东西:
[NSNumber numberWithFloat:[persID floatValue]];
我已经尝试了所有标准的方法,但没有占上风。