Ios NSPredicate用于筛选具有(';)字符问题的数组
下面是我用字符串过滤数组的测试。如果我的字符串不包含(')字符,它就可以正常工作Ios NSPredicate用于筛选具有(';)字符问题的数组,ios,objective-c,nspredicate,Ios,Objective C,Nspredicate,下面是我用字符串过滤数组的测试。如果我的字符串不包含(')字符,它就可以正常工作 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"b'en", @"Adam", @"Melissa", @"arbind", nil]; //NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b'"];
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"b'en", @"Adam", @"Melissa", @"arbind", nil];
//NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b'"]; -> it work
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b''"]; -> it crash
NSArray *beginWithB = [array filteredArrayUsingPredicate:sPredicate];
NSLog(@"beginwithB = %@",beginWithB);
我还尝试将字符串更改为'b\'
或'b'
,但它仍然崩溃
这是坠机日志
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“无法分析格式字符串”SELF contains[c]“b”“”
如何解决?任何帮助都将不胜感激。试试这个
NSString *searchword = @"b";
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",searchword];
你得到的是
试试这个
NSString *searchword = @"b";
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",searchword];
你得到的是
请尝试按如下方式筛选结果:
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"b'en", @"Adam", @"Melissa", @"arbind", nil];
NSString *strToBeSearched = @"b'";
//NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b'"]; -> it work
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",strToBeSearched]; //-> it also work
//OR
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b\\''"];
NSArray *beginWithB = [array filteredArrayUsingPredicate:sPredicate];
NSLog(@"containB = %@",beginWithB);
请尝试按以下方式筛选结果:
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"b'en", @"Adam", @"Melissa", @"arbind", nil];
NSString *strToBeSearched = @"b'";
//NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b'"]; -> it work
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] %@",strToBeSearched]; //-> it also work
//OR
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b\\''"];
NSArray *beginWithB = [array filteredArrayUsingPredicate:sPredicate];
NSLog(@"containB = %@",beginWithB);
当你尝试反斜杠时,你已经很接近了。这是
NSPredicate
用于转义特殊字符的字符。但是,您需要两个而不是一个反斜杠:
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"b'en", @"Adam", @"Melissa", @"arbind", nil];
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b\\''"];
// ^^
NSArray *beginWithB = [array filteredArrayUsingPredicate:sPredicate];
NSLog(@"beginwithB = %@",beginWithB);
您需要两个的原因是Objective-C编译器。它处理代码中的所有字符串文本,并替换遇到的转义序列。如果希望看到单个反斜杠,字符串文字需要有两个反斜杠,因为反斜杠本身在Objective-C字符串文字中编码为
\\
。尝试反斜杠时,您的距离非常近。这是NSPredicate
用于转义特殊字符的字符。但是,您需要两个而不是一个反斜杠:
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"Nick", @"b'en", @"Adam", @"Melissa", @"arbind", nil];
NSPredicate *sPredicate = [NSPredicate predicateWithFormat:@"SELF contains[c] 'b\\''"];
// ^^
NSArray *beginWithB = [array filteredArrayUsingPredicate:sPredicate];
NSLog(@"beginwithB = %@",beginWithB);
您需要两个的原因是Objective-C编译器。它处理代码中的所有字符串文本,并替换遇到的转义序列。如果希望看到单个反斜杠,字符串文字需要有两个反斜杠,因为反斜杠本身在Objective-C字符串文字中编码为
\\
。如果您的名字是b'en
NSString *name = @"b'en";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == \"%@\"", name];
希望这会有所帮助:)如果你的名字是b'en
NSString *name = @"b'en";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == \"%@\"", name];
希望这会有所帮助:)可能不相关,但是
包含对于一个谓词来说听起来像是一个不好的候选者,其结果被命名为beginWith…
@Alladinian是的,这只是我的测试,我只是从中复制了这段代码。感谢您的更正可能与此无关,但是contains
对于一个结果名为beginWith…
@Alladinian是的,这只是我的测试,我只是从中复制了这段代码。感谢您的更正如果您想要excat答案,请使用daskblinkknight答案,否则请尝试我的答案您提供了正确的解决方案,但您向我展示的方式不是很好。因为我询问的字符串是('),但在测试中,字符串不包含(')。无论如何,非常感谢您给我一个正确的解决方案;)如果你想得到excat答案,请使用daskblinkknight答案,否则请尝试我的答案。你提供了正确的解决方案,但你给我的方式不是很好。因为我询问的字符串是('),但在测试中,字符串不包含(')。无论如何,非常感谢您给我一个正确的解决方案;)@PhanVănLinh Welcome:-)@PhanVănLinh Welcome:-)它因错误而崩溃:此类不符合密钥名称的键值编码。
。我找到了解决办法。感谢您的帮助IT崩溃并出现以下错误:此类不符合密钥名称的键值编码。
。我找到了解决办法。谢谢你的帮助