0

保存されたpersistentIdentifierから参照された曲を再生しようとしていますが、保存された値を使用してフィルタを適用すると、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

アイテムがゼロではないと思います。具体的なメディア アイテムが 1 つあると言っています。

// gives <MPConcreteMediaItem: 0x1dd4d3c0> 15991677378153886747

これを追加してみて、タイトルがポップアップするかどうかを確認してください:

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

unsigned long long 定数の初期化に問題がある可能性があります。ULL番号にサフィックスを追加してみてください。

15991677378153886747ULL

NSNumber次に、それをリテラルにラップします。

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