Core Data,尝试使用 NSPredicate 过滤 toMany 关系集,但收到“此处不允许使用 to-many key”错误

2024-01-12

这是我的模型:http://www.girardet.ch/model.png http://www.girardet.ch/model.png

我的目标是检索符合以下条件的所有报价:

  • 属于特定主题:Themes 的 name_en 属性
  • 按相关性排序
  • 按作者过滤(使用作者的别名属性)

这是我的代码:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"ThemeEntries" inManagedObjectContext:_context];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"relevancy" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

// predictate - filter
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"theme.name_en=%@ AND quotes.author.alias=%@",@"mytheme", @"myauthor"];

[fetchRequest setPredicate:谓词];

我收到“此处不允许使用多对键”错误。

如果我改用这个谓词

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"theme.name_en=%@, @"mytheme"];

它运作良好,我可以循环ThemeEntries我得到并得到我所有的引言......但它没有被作者过滤。

我可以做什么来按作者过滤?


您的问题是,其中一个键路径的关系是一对多、一对多,并且谓词不知道哪个特定对象与哪个对象对应。

你有ThemeEntities<<-->>Quotes这在每一端产生一个集合。这quotes.author.aliaskeypath 表示“一组引号实例,每个实例都链接到作者实例,而作者实例又具有别名属性。”谓词无法处理该集合。

您需要使用子查询来跳转对多键路径。子查询本质上是一个嵌套谓词,它搜索一个集合并返回与嵌套谓词匹配的另一组对象。子查询的记录很少,但它们具有以下形式:

SUBQUERY(collectionName,$collectionElementVariable,expression-with-$collectionElementVariable)

在这种情况下,您要查找与提供的字符串匹配的别名具有作者关系的任何报价实例。您的谓词需要如下所示:

@"theme.name_en=%@ AND (0!=SUBQUERY(quotes,$eachQuote,$eachQuote.author.alias=%@).@count)",@"mytheme", @"myauthor"

子查询表示,“在报价集中,获取每个报价对象并测试其作者关系对象是否具有与 'myauthor' 匹配的别名属性。计算与该匹配的报价对象的数量。如果数量非零,则返回真的。”

每当您在一对多关系中遍历关键路径时,都需要使用子查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Core Data,尝试使用 NSPredicate 过滤 toMany 关系集,但收到“此处不允许使用 to-many key”错误 的相关文章

  • 如何从装有 iOS 5 的新 iPhone(供个人使用)获取历史位置数据?

    过去 从 iPhone 上名为solidified db 的文件中获取历史位置数据很容易 例如 请参阅http petewarden github com iPhoneTracker http petewarden github com i
  • 如何让 iPhone 屏幕变暗

    我的 iPhone 屏幕上有一个刷新按钮 可以刷新当前视图中的表格 屏幕刷新得很漂亮 但是有没有办法让屏幕变暗 然后在表格刷新后再次变亮 您可以在要调暗的视图上放置一个带有黑色背景的非不透明视图 默认情况下 其 alpha 值为 0 因此是
  • 在后台线程上搜索

    我试图在 iPhone 应用程序中搜索数千个对象 但是搜索严重滞后 每次击键后 UI 都会冻结 1 2 秒 为了防止这种情况 我必须在后台线程上执行搜索 我想知道是否有人有一些在后台线程上搜索的提示 我读了一点NSOperation并在网上
  • 在 iPhone 上搜索 PDF

    经过两天尝试使用 Quartz 从 PDF 中读取注释后 我成功做到了并且发布我的代码 https stackoverflow com questions 4080373 get pdf hyperlinks on ios with qua
  • 隐藏故事板中的导航栏

    谁能告诉我如何隐藏故事板中的导航栏 我下面的代码在模拟器中运行时工作正常 但它仍然出现在我的故事板中 这真的很烦我 因为它弄乱了我的图像的位置 有人可以帮忙吗 void viewWillAppear BOOL animated super
  • 应用程序:didReceiveRemoteNotification:未调用 fetchCompletionHandler

    出现了这个功能application didReceiveRemoteNotification fetchCompletionHandler当应用程序被强制退出时不会被调用 我的印象是 无论应用程序处于什么状态 该函数都会被调用 但似乎只有
  • 如何在 iPhone sdk 上访问年龄限制家长控制

    有没有办法以编程方式访问 iPhone iPad iPod 上家长控制中设置的年龄限制 如果年龄限制太低 我想禁止使用某些功能 我一直在四处寻找 但也许我没有使用正确的搜索词或其他东西 任何帮助表示赞赏 也许这样行不通 thanks 从 3
  • iOS 低内存崩溃,但内存使用率非常低

    这已经困扰我很长时间了 我的应用程序运行占用大约 2 74MB 内存 没关系 但当它创建 UIWebView 时 它会增加到大约 5 87MB 并继续崩溃 这些是在我的第一代 iPad 上运行时仪器中的实时字节下给出的值 我找不到崩溃日志
  • 从本机 iPhone 应用程序访问 UIWebView 本地存储数据

    我正在编写一个包含 UIWebView 组件的本机 iPhone 应用程序 该组件访问互联网 Web 应用程序 并且该 Web 应用程序使用 HTML5 本地存储离线存储数据 是否可以从本机应用程序访问此本地存储数据 我想做类似的事情 简而
  • iOS后台获取时间限制崩溃

    我已经设置了背景获取 使用大纲NSScreencast 第 92 集 http nsscreencast com episodes 92 background fetch BOOL application UIApplication app
  • Swift try inside Objective-C 块

    我需要创建一个函数foo它接受一个抛出闭包作为参数 我可以使用 Swift 或 ObjC 来实现它 但我需要能够从两者中调用它 像这样 Swift func bar throws func foo block throws gt void
  • 如何本地化 iOS 故事板

    我有一个包含一些视图的 iPhone 故事板 例如 导航项标题名为News 应翻译为其他语言 当我向故事板添加新的本地化版本时 它会为新语言创建当前故事板的副本 在这里我可以更改导航项的标题 但对我来说它似乎不太有用 如果我的故事板包含 1
  • 为什么 iPhone 应用程序的 main() 函数没有机会完成?

    考虑以下main 大多数 iPhone 应用程序都采用以下方法 int main int argc char argv NSAutoreleasePool pool NSAutoreleasePool alloc init int retV
  • 从设备获取联系人列表时出现问题

    这段代码有什么问题 NSMutableArray contactArray NSMutableArray alloc init ABAddressBookRef addressBook ABAddressBookCreate CFArray
  • UIAlertView 每次调用都会弹出三次,而不是一次

    我在程序的两个不同部分中从 NSAlert 中得到了奇怪的行为 行为是 出现警报 然后自发地消失 警报重新出现 然后一直保留 直到用户解除 即正常行为 警报再次出现 此行为仅在第一次调用显示警报的方法时发生 第一次之后 它的行为就正常了 以
  • Grand Central Dispatch (GCD) 调度源标志

    我最近不再使用 to GCD 调度来源 https developer apple com documentation dispatch 1385630 dispatch source create监视文件更改 效果很好 API 也变得更加
  • 使用 Dirac 在 iPhone 中进行实时音高变化 [重复]

    这个问题在这里已经有答案了 可能的重复 iPhone 上的实时音调变换 https stackoverflow com questions 1100495 real time pitch shifting on the iphone 我已经
  • 如何将nsmutable数组添加到sqlite数据库表中

    如何将nsmutablearray添加到sqlite数据库表中 有人可以帮我编码吗 您可以使用 for int i 0 i lt mutArray count i NSString string mutArray objectAtIndex
  • 将 NSFetchedResultsController 添加到项目后出现问题

    我设置 CoreData 时没有NSFetchedResultsController一切都保存得很好 切换到之后NSFetchedResultsController 我在尝试保存图像时遇到奇怪的错误 这是我用来保存图像的代码 void sa
  • 刷新单元格的 UITableView 队列

    我想知道如果调用 UITableView reloadData 时 UITableView 队列被刷新 是否有人可以回复我 我正在尝试这样做 但这对我没有帮助 有什么建议吗 如果你查看 UITableView 的头文件 你可以看到有一个名为

随机推荐