Ios 核心数据谓词对涉及谓词的多对多性能

Ios 核心数据谓词对涉及谓词的多对多性能,ios,objective-c,core-data,Ios,Objective C,Core Data,在我刚刚编写的一个应用程序中,我有一个对象关系,可以将其编写为baseComponent Recipe 这种关系的原因是为了提高现有基础模型的性能,该模型在BaseComponent和Recipe之间有大约3个表 我以前写的谓词是 [NSPredicate predicateWithFormat:@"SUBQUERY(ingredients, $i, ANY $i.ingredientSection.recipe IN %@).@count > 0", self.recipesFilter

在我刚刚编写的一个应用程序中,我有一个对象关系,可以将其编写为baseComponent Recipe

这种关系的原因是为了提高现有基础模型的性能,该模型在BaseComponent和Recipe之间有大约3个表

我以前写的谓词是

[NSPredicate predicateWithFormat:@"SUBQUERY(ingredients, $i, ANY $i.ingredientSection.recipe IN %@).@count > 0", self.recipesFilter];
它穿越了几个物体

我把它换成了

[NSPredicate predicateWithFormat:@"ANY recipes IN %@", recipes];
而且速度要慢得多


作为一点信息,该谓词是NSFetchedResultsController的一部分,NSFetchedResultsController从不同的表中传递配方。有人解释过为什么这样做会比较慢,以及如何快速进行吗?

我认为您的谓词可以改进。中
的正确用法是:

[NSPredicate predicateWithFormat:@"recipes in %@", selectedRecipes];

谓词格式字符串的参数应该是recipes,而不是recipe ID。我已经尝试了两种方法。现在我们知道您的输入数组是错误的,或者您正在搜索的基础数据是错误的。你检查过了吗?都没有。输入数组很好,可以正常工作,在功能上可以正常工作,只是没有我想要的那么快。