繁体   English   中英

核心数据与多个关系为NSOrderedSet

[英]Core Data to-many relationship as NSOrderedSet

我的核心数据模型:

Playlist
=======
name

songs (to-many relationship to Song objects, NSOrderedSet)

播放列表中有多首歌曲,并且歌曲顺序很重要。
使用NSOrderedSet可以保持歌曲顺序,问题是当我想在表视图中获取并显示播放列表的歌曲时,我不知道如何在NSFetchRequest使用该优点。

这是我获取播放列表的歌曲的方式:

NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Song"];
request.predicate = [NSPredicate predicateWithFormat:@"ANY playlists = %@", self.playlist];
request.sortDescriptors = // ???
request.fetchBatchSize = 20;

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                    managedObjectContext:managedObjectContext
                                                                      sectionNameKeyPath:nil
                                                                               cacheName:nil];  

实际上,这是行不通的,因为NSFetchedResultsController需要带有排序描述符的提取请求。

所以我有歌曲顺序,但是我不能按照那个顺序取它们吗?

我认为这是不可能的,您将需要以其他方式存储排序顺序。 这里是关于它的讨论: NSFetchedResultsController和NSOrderedSet关系

我过去曾经这样做过:

将此方法添加到Song NSManagedObject子类中:

- (NSUInteger)indexInPlaylist
{
    NSUInteger index = [self.playlist.songs indexOfObject:self];
    return index;
}

然后,可以在NSFetchedResultsController的排序描述符中使用此方法:

fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"indexInPlaylist" ascending:YES]];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM