访问Core Data中的相关对象

时间:2014-01-17 16:10:08

标签: ios objective-c core-data

我在SongsPlaylists实体之间建立了关系。现在,我正在尝试访问所选Songs中的Playlist。选定的播放列表将保存在对象

optionsSingle.selectedRowNumber

我有这个获取方法,我正在访问所有歌曲对象,并将其保存在NSMutableArray个名为播放列表中。如何仅获取与播放列表对象(optionsSingle.selectedRowNumber)相关的歌曲?

- (void)fetchDevices {

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Playlists"];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Playlists" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];    

    playlists = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
}

核心数据模型:

enter image description here

2 个答案:

答案 0 :(得分:2)

我认为你有更好的设计选择。虽然Sebastian建议的更正非常重要,但您应该重新设计表格视图。 (我推断它是一个表格视图,显示您问题中的播放列表)。

您应该使用NSFetchedResultsController而不是创建数组,并使用数组的内容填充表。 FRC将负责特定于表视图的所有提取和内存管理。

您可以通过打开主 - 详细信息模板(Xcode中的“新建项目”)并选中“核心数据”选项,轻松获得NSFetchedResultsController的工作示例。

现在您可以非常轻松地访问播放列表:

Playlist *playlist = [self.fetchedResultsController objectAtIndexPath:indexPath]; 

您会发现编写干净,简洁和可读的代码会更容易。

答案 1 :(得分:1)

您的代码和模型存在一些问题。实体类应命名为单数(SongPlaylist)。

该方法称为fetchDevices(似乎是复制和粘贴错误,应该是fetchPlaylists或其他什么?)

你做的太多了,无法检索它们。该方法可以简化为:

- (void)fetchPlaylists {

    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Playlist"];    

    playlists = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
}

您还可以尝试减少关系,以便一个Playlist有多个Song(s)。这应该足以满足您的要求。然后,您可以继续并访问将自动使用播放列表提取的歌曲列表。