我有一个NSTableView
,充满了歌曲标题。
歌曲按艺术家排序,因此我可以将艺术家姓名显示为行视图。
代码
到目前为止,我必须遍历表数据并手动将艺术家添加到数组中。
NSMutableArray *songsAndArtists = [NSMutableArray array];
Artist *artist;
for (Song *song in self.songs) {
if (artist != song.artist) {
artist = song.artist;
[songsAndArtists addObject:artist];
}
[songsAndArtists addObject:song];
}
如果您有 1'000 - 5'000 首歌曲,这可能会非常慢。
我还没有真正想出如何加快这个过程。
有人知道如何在运行时计算这个吗?
编辑
我将尝试澄清我的意思:
NSTableView
支持组行。我的表格视图显示了 CoreData 中的所有歌曲。我想使用组行来显示歌曲的艺术家,就像我在上面添加的打印屏幕一样。
为此,我必须提供一个包含艺术家的数组,然后是歌曲,然后是下一位艺术家,依此类推。
上面的代码显示了如何插入艺术家,但这是一个非常耗时的过程。
所以我的问题是,我怎样才能加快速度?
暗示
就像nielsbot和Feloneous Cat所建议的那样,遍历所有艺术家对我不起作用。
用户还可以选择通过图书馆进行搜索。因此,并非所有歌曲都应实际出现在列表中。
解决方案
我只是想让你知道问题出在哪里:
问题是,我实际上NSString
在以前的版本中比较过。
相当愚蠢的错误...
它需要大约0.1 秒或更短的时间,这很棒:
tableData = [self addGroupRowsToArray:[self allSongs] withKeyPath:@"artist"];
- (NSArray *)addGroupRowsToArray:(NSArray *)array withKeyPath:(NSString *)keyPath {
NSMutableArray *mixedArray = [NSMutableArray array];
id groupRowItem;
for (id arrayItem in array) {
if (groupRowItem != [arrayItem valueForKeyPath:keyPath]) {
groupRowItem = [arrayItem valueForKeyPath:keyPath];
[mixedArray addObject:groupRowItem];
}
[mixedArray addObject:arrayItem];
}
return mixedArray;
}