我在Songs
和Playlists
实体之间建立了关系。现在,我正在尝试访问所选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];
}
核心数据模型:
答案 0 :(得分:2)
我认为你有更好的设计选择。虽然Sebastian建议的更正非常重要,但您应该重新设计表格视图。 (我推断它是一个表格视图,显示您问题中的播放列表)。
您应该使用NSFetchedResultsController
而不是创建数组,并使用数组的内容填充表。 FRC将负责特定于表视图的所有提取和内存管理。
您可以通过打开主 - 详细信息模板(Xcode中的“新建项目”)并选中“核心数据”选项,轻松获得NSFetchedResultsController
的工作示例。
现在您可以非常轻松地访问播放列表:
Playlist *playlist = [self.fetchedResultsController objectAtIndexPath:indexPath];
您会发现编写干净,简洁和可读的代码会更容易。
答案 1 :(得分:1)
您的代码和模型存在一些问题。实体类应命名为单数(Song
和Playlist
)。
该方法称为fetchDevices
(似乎是复制和粘贴错误,应该是fetchPlaylists
或其他什么?)
你做的太多了,无法检索它们。该方法可以简化为:
- (void)fetchPlaylists {
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Playlist"];
playlists = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
}
您还可以尝试减少关系,以便一个Playlist
有多个Song
(s)。这应该足以满足您的要求。然后,您可以继续并访问将自动使用播放列表提取的歌曲列表。