次のコードを使用して、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];
かなり基本的なもの。
NSString
PersistentID をXML ファイルに書き込む必要があるため (ネットワーク経由で別のデバイスに送信するため) 、PersistentID を取得しています。したがって、そのままにしておくことができない理由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]];
私は勝つことなくそれを行うすべての標準的な方法を試しました。