核心数据到多个关系为NSOrderedSet

时间:2014-02-19 20:56:42

标签: ios iphone objective-c core-data nsfetchedresultscontroller

我的核心数据模型:

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需要带有排序描述符的获取请求。

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

2 个答案:

答案 0 :(得分:0)

我认为这不可行,您需要以其他方式存储排序顺序。以下是对它的讨论:NSFetchedResultsController and NSOrderedSet relationships

答案 1 :(得分:-1)

我过去做过这个:

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

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

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

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