在我的核心数据模型中,我想搜索与其他实体具有一对一关系并且具有所有10个属性的实体。如果关键字出现在实体中的任何位置(即使在子实体中),我应该能够打印相同的实体。
使用枚举块,对我来说看起来不是一个好选择。
如何在不影响性能的情况下进行搜索?
答案 0 :(得分:2)
尝试使用NSPredicate
,您可以在NSFetchRequest
答案 1 :(得分:1)
实际上如果你回到Fast Enumeration,并使用rangeOfString,就像这样:
NSString * lowerCaseTerm = [term lowercaseString];
NSString * content = [(NSString*)[theEntity valueForKey:"key"] lowercaseString];
BOOL containsWord = [content rangeOfString:lowerCaseTerm].location == NSNotFound ? false : true;
如果“content”是您在实体中寻找的“NSString”,那么您将获得比NSPredicate更好的性能。谓词更优雅(更少的代码),但它比rangeOfString慢得多。(需要一些设置)
如果你想查看一个实体的多个键,那么设置一个快速数组并循环它。 @ [@ “KEY1”,@ “KEY2”];
我使用这种方法不仅可以查找实体是否包含单词,还可以确定相关性。 使用NSPredicate,花了7秒钟搜索2000多个实体并过滤掉那些不需要的实体然后采取措施。
使用rangeOfString的所有内容大约需要0.25秒。辅助线程0.5秒。 (仪器报告我的具体案例。我需要提供加权相关性,以便客户满意。)
(提示:在内容中找到单词是挂断的地方)
当然,您需要使用辅助线程来防止UI在执行此操作时锁定。如果需要更清晰,请告诉我。