Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.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 CoreData自定义搜索在文本字段更改时取消_Ios_Objective C_Multithreading_Search_Core Data - Fatal编程技术网

iOS CoreData自定义搜索在文本字段更改时取消

iOS CoreData自定义搜索在文本字段更改时取消,ios,objective-c,multithreading,search,core-data,Ios,Objective C,Multithreading,Search,Core Data,我的应用程序中有一个文本字段是搜索,我添加了事件编辑更改,但当我键入fast CoreData时,无法快速搜索,因此结果不准确 目前我正在使用这样的脚本: [self->_searchThread cancelAllOperations]; NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(performSearch:) objec

我的应用程序中有一个文本字段是搜索,我添加了事件编辑更改,但当我键入fast CoreData时,无法快速搜索,因此结果不准确

目前我正在使用这样的脚本:

[self->_searchThread cancelAllOperations];
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(performSearch:) object:((UITextField *)sender).text];
[self->_searchThread addOperation:operation];
在performSearch中,我添加所有谓词,并对结果进行格式化,然后调用:

[self performSelectorOnMainThread:@selector(setSearchResults:) withObject:@[[NSArray arrayWithArray:data]] waitUntilDone:NO];
我认为使用
[self->\u searchThread cancelAllOperations]
将取消当前请求并立即启动一个新请求,但它似乎不是这样工作的。用户更改文本字段后,是否有任何方法可以取消当前正在运行的搜索并开始新建,或者是否有其他解决方案


谢谢

只是一个问题:你为什么不使用一个UISearchBar和所有代理一起进行搜索输入等?因为我有定制的布局,而UISearchBar不适合整体布局-我尝试过。关于@Alice的评论和你的回答,你可以方便地操纵
UISearchBar
的大小(初始化器)方法
initWithFrame:
,并且由于
UISearchBar
具有
frame
属性,您可以在代码执行期间动态调整
frame
。关于您的问题,您是否考虑过从
NSFetchedResultsController
实例创建一个
NSArray
的所有
fetchedObject
?我怀疑使用
filteredArrayUsingPredicate
方法将相同的谓词应用于这样的
NSArray
可能会更快。这将是不好的,因为有很多元素,并且由于关系,我将使用三个数组,但我认为我找到了解决方案,我将搜索线程(NSManagedObject)放在睡眠200毫秒,然后我添加了“如果(取消)返回;”因此,如果用户键入fast,CoreData不会初始化。