NSA*_*ict 9 enumeration objective-c key-value-coding nspredicate
我正在使用键值编码来获取iTunes中的所有艺术家:
[self.iTunes valueForKeyPath:@"sources.@distinctUnionOfArrays.playlists.@distinctUnionOfArrays.tracks.artist"];
Run Code Online (Sandbox Code Playgroud)
现在,这很好用.这非常有效.我也想对专辑做同样的事情.
[self.iTunes valueForKeyPath:@"sources.@distinctUnionOfArrays.playlists.@distinctUnionOfArrays.tracks.album"];
Run Code Online (Sandbox Code Playgroud)
这里的问题是,有多个相同名称的专辑,但不一定是同一个艺术家.有没有办法获得每张专辑的歌曲,所以我可以找出它是什么艺术家,并获得它的封面?我知道有NSPredicate,但这很慢.
具体代码并不重要,我只需要键值编码部分.
谢谢!
这不是一个完整的答案。
为了像我这样最初不知道记录在哪里的人的利益:您必须在安装了 iTunes 的 Mac 上,然后运行命令
sdef /Applications/iTunes.app | sdp -fh --basename iTunes
Run Code Online (Sandbox Code Playgroud)
iTunes.h这将神奇地在您当前的工作目录中创建。然后您可以仔细iTunes.h查看 API 的外观。Mac 开发者库或其他内容中似乎没有正式记录它。
除了属性之外,每个属性iTunesTrack还有一个属性,所以我认为您真正想做的就是返回一个唯一元组的数组。artistalbum(album, artist)
好的,那么我们如何从单个 KVC 查询中获取元组数组呢?例如,我们想编写类似的内容sources.@distinctUnionOfArrays.playlists.@distinctUnionOfArrays.tracks.albumAndArtist并让它返回类似NSArrayof 的内容NSDictionary@[ @{ @"Help!", @"The Beatles" }, @{ @"No!", @"They Might Be Giants" }, ... ]
编辑ughoavgfhw 在评论中建议下一步:您可以使用类别来定义,albumAndArtist如下所示:
@interface iTunesTrack (albumAndArtist)
@property (readonly) NSDictionary *albumAndArtist;
@end
@implementation iTunesTrack (albumAndArtist)
-(NSDictionary *) albumAndArtist
{
return @{ @"album":self.album, @"artist":self.artist };
}
@end
Run Code Online (Sandbox Code Playgroud)
现在你可以写出我们想要写的那一行:
[self.iTunes valueForKeyPath:@"sources.@distinctUnionOfArrays.playlists.@distinctUnionOfArrays.tracks.albumAndArtist"];
Run Code Online (Sandbox Code Playgroud)
这应该会给你一个NSArrayof NSDictionary,这基本上就是你想要的。请注意,我还没有测试过这段代码或任何东西!
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |