gpt4 book ai didi

ios - NSFetchedResultsController 复杂的获取请求和模型

转载 作者:可可西里 更新时间:2023-11-01 03:34:09 26 4
gpt4 key购买 nike

我正在尝试针对这种情况设计我的 CoreData 模型:

我们有 Song 对象,它与一些 List 有一对多的关系。

每个List都有name属性并且和Song有一对多的关系

之所以需要这些多对多关系,是因为一首Song可以同时出现在每个List中。

我需要使用 NSFetchedResultsController(因为用户可能有 10,000歌曲,我不想将它存储在 NSArray 中的某个地方。

当我尝试为 sectionNameKeyPath: 设置一些值时,例如@"List.name" 我有一个错误“不允许多对多关系”,当然这是有道理的。

所以我需要帮助如何设计我的模型,使其能够拥有 Song 和一些 List,例如“History”/“Next Playing”等,以及能够使用 NSFetchedResultsController 获取所有数据。

感谢任何帮助。如果我的解释不清楚,请询问更多信息。

我的部分代码:

- (void)initFetch {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Song"];

[fetchRequest setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"index" ascending:YES]]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"ANY list.@count != 0"];
fetchRequest.fetchBatchSize = 20;

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.context sectionNameKeyPath:@"name" cacheName:nil];
[self.fetchedResultsController setDelegate:self];

NSError *error = nil;
[self.fetchedResultsController performFetch:&error];

if (error) {
NSLog(@"Unable to perform fetch.");
NSLog(@"%@, %@", error, error.localizedDescription);
}
}

最佳答案

使用 FRC 可以很好地向您的用户显示数据,但在使用它时,它可以决定您的模型需要如何构建,而不是您可能认为您的模型实体和关系应该如何构建。在您的情况下,您似乎想要查看数据库中歌曲的实际 States 列表,而不是歌曲列表。每个状态实例都与一首歌有一对一的关系,并且状态在您的列表中可能有一对多的关系,例如。链接到历史列表、播放下一个列表、当前正在播放的“列表”(在最后一种情况下只有一个实例)。通过将您的 FRC 实体设置为此 State 实体和链接到状态所在列表的部分键路径,您可以实现上述要求,而无需操作 indexPaths 或使用多个 FRC。有了这个单独的实体,您还可以在以后添加其他属性,例如上次播放的日期或播放次数的总和。所有这些都可以在 state 实体而不是 Song 实体本身上完成。

关于ios - NSFetchedResultsController 复杂的获取请求和模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37459068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com