iOS メディア ライブラリからメタ情報を取得し、json でサーバーに送信しようとしています。
しかし、MPMediaQuery の結果をループしてメタ情報を取得すると、非常に時間がかかることがわかりました。
MPMediaQuery *query = [[MPMediaQuery alloc]init];
MPMediaPropertyPredicate *predicate = [MPMediaPropertyPredicate predicateWithValue:[NSNumber numberWithInteger:MPMediaTypeMusic] forProperty:MPMediaItemPropertyMediaType];
[query addFilterPredicate:predicate];
NSMutableArray *songs = [[NSMutableArray alloc] init];
songs = [query items];
[songs enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[obj valueForProperty:MPMediaItemPropertyTitle];
[obj valueForProperty:MPMediaItemPropertyPlaybackDuration];
[obj valueForProperty:MPMediaItemPropertyArtist];
[obj valueForProperty:MPMediaItemPropertyAlbumTitle];
[obj valueForProperty:MPMediaItemPropertyGenre];
[obj valueForProperty:MPMediaItemPropertyAlbumTrackNumber];
}];
9000 曲のライブラリの場合、列挙ループが完了するまでに 25 秒以上かかることがあります。
メタ情報をまとめて取得するより高速な方法はありますか? この場合、ValueForProperty は非常に効率が悪いように見えます (ループ内の呼び出しごとに約 5 秒追加されます)。