Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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 如何使搜索栏成为iPhone联系人应用程序或处理多个单词的搜索栏_Ios_Objective C_Uisearchbar_Predicate - Fatal编程技术网

Ios 如何使搜索栏成为iPhone联系人应用程序或处理多个单词的搜索栏

Ios 如何使搜索栏成为iPhone联系人应用程序或处理多个单词的搜索栏,ios,objective-c,uisearchbar,predicate,Ios,Objective C,Uisearchbar,Predicate,我正在创建一个搜索栏,它的行为应该类似于iPhone联系人搜索栏。目前,它部分是这样做的。 这是我的密码 -(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { NSRange whiteSpaceRange = [result rangeOfCharacterFromSet:[NS

我正在创建一个搜索栏,它的行为应该类似于iPhone联系人搜索栏。目前,它部分是这样做的。 这是我的密码

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
     NSRange whiteSpaceRange = [result rangeOfCharacterFromSet:[NSCharacterSet whitespaceCharacterSet]];
        if (whiteSpaceRange.location != NSNotFound)
        {
            NSString * stringAfterSpace = [result substringFromIndex:whiteSpaceRange.location];
            NSString * stringBeforeSpace= [result substringToIndex:whiteSpaceRange.location];

            NSPredicate *predicateForAfterSpace=[NSPredicate predicateWithFormat:@"catNm CONTAINS[cd] %@",stringAfterSpace];

            NSPredicate *predicateForBegining = [NSPredicate predicateWithFormat:@"catNm BEGINSWITH[cd] %@", stringBeforeSpace];

            NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[predicateForBegining, predicateForAfterSpace]];
            searchArray = [[dataArray filteredArrayUsingPredicate:compoundPredicate] mutableCopy];

        }
        else
        {
            NSPredicate *predicateForBegining = [NSPredicate predicateWithFormat:@"catNm BEGINSWITH[cd] %@", result];

            NSString *stringAfterSpace=[NSString stringWithFormat:@" %@",result];
            NSPredicate *predicateForAfterSpace=[NSPredicate predicateWithFormat:@"catNm CONTAINS[cd] %@",stringAfterSpace];

            NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicateForBegining,predicateForAfterSpace]];
            searchArray = [[dataArray filteredArrayUsingPredicate:compoundPredicate] mutableCopy];
        }
}
主要区别是我的搜索栏处理一个不完整的关键字,但不超过一个。假设
array={{catNm=@“Asus Zenfone 3 Max”},{catNm=@“Asus Zenfone Go}}
如果搜索
asu zen
zen ma
则显示结果,但如果搜索
asu zen max
则出错
我想知道的是如何在搜索栏中处理多个空格,这里有一些你可以使用的东西:正则表达式(Regex)

我对regex不是很有信心,但这应该可以做到。如果你想添加更复杂的东西,可以使用在线RegexTools

结果/样本测试:

$>SearchString: "asus zen max"
Filtered: (
    "Asus Zenfone 3 Max"
)
$>SearchString: "zen ma"
Filtered: (
    "Asus Zenfone 3 Max"
)
$>SearchString: "asu zen"
Filtered: (
    "Asus Zenfone 3 Max",
    "Asus Zenfone Go"
)
$>SearchString: "zen"
Filtered: (
    "Asus Zenfone 3 Max",
    "Asus Zenfone Go"
)
$>SearchString: "M"
Filtered: (
    "Asus Zenfone 3 Max"
)
$>SearchString: "sams"
Filtered: NO RESULT
$>SearchString: "zen asu"
Filtered: NO RESULT
$>SearchString: "zen g"
Filtered: (
    "Asus Zenfone Go"
)
$>SearchString: "a   g"
Filtered: (
    "Asus Zenfone Go"
)
$>SearchString: "asus zen max"
Filtered: (
    "Asus Zenfone 3 Max"
)
$>SearchString: "zen ma"
Filtered: (
    "Asus Zenfone 3 Max"
)
$>SearchString: "asu zen"
Filtered: (
    "Asus Zenfone 3 Max",
    "Asus Zenfone Go"
)
$>SearchString: "zen"
Filtered: (
    "Asus Zenfone 3 Max",
    "Asus Zenfone Go"
)
$>SearchString: "M"
Filtered: (
    "Asus Zenfone 3 Max"
)
$>SearchString: "sams"
Filtered: NO RESULT
$>SearchString: "zen asu"
Filtered: NO RESULT
$>SearchString: "zen g"
Filtered: (
    "Asus Zenfone Go"
)
$>SearchString: "a   g"
Filtered: (
    "Asus Zenfone Go"
)