Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在整个实体中搜索,核心数据_Ios_Core Data_Sqlite_Nspredicate - Fatal编程技术网

Ios 在整个实体中搜索,核心数据

Ios 在整个实体中搜索,核心数据,ios,core-data,sqlite,nspredicate,Ios,Core Data,Sqlite,Nspredicate,在我的核心数据模型中,我想搜索一个实体,它与其他实体有一对一的关系,并且在所有10个属性中都有。如果关键字出现在实体中的任何位置(甚至在子实体中),我应该能够打印相同的实体 使用枚举块,在我看来不是一个好的选择 我应该如何在不影响性能的情况下进行搜索?尝试使用NSPredicate,如果使用快速枚举,您可以在NSFetchRequest中写入关键字和实体名称,并使用以下rangeOfString: NSString * lowerCaseTerm = [term lowercaseString

在我的核心数据模型中,我想搜索一个实体,它与其他实体有一对一的关系,并且在所有10个属性中都有。如果关键字出现在实体中的任何位置(甚至在子实体中),我应该能够打印相同的实体

使用枚举块,在我看来不是一个好的选择


我应该如何在不影响性能的情况下进行搜索?

尝试使用
NSPredicate
,如果使用快速枚举,您可以在
NSFetchRequest
中写入关键字和实体名称,并使用以下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,搜索2000多个实体并筛选出不需要的实体只需7秒钟,然后就可以求助

使用rangeOfString时,所有操作都需要0.25秒。辅助线程上的0.5秒。(针对我的具体案例的仪器报告。我需要为客户满意度提供与订单的加权相关性。)

(提示:在内容中查找单词就是挂断的地方)


当然,在执行此操作时,您需要使用辅助线程来防止UI锁定。如果需要更清楚,请告诉我

好的,这是一个想法,但是有超过100条记录,而每条记录有10个实体,这是大量的数据,因此需要一种更注重性能的方法。不要担心性能,100条记录是相当合理的(如果不是很小的话)数据量,即使对于NSArray也是如此。CoreData+Sqlite肯定能够提供如此数量的数据。您尝试过在执行fetch时测量性能吗?@Piyush NSPredicate/NSFetchRequest确实是API针对此类问题提供的。实现这一点,如果性能不可接受,则返回并启动一个新线程。