ios 不包含特定字符串的 NSPredicate 查询
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/12534629/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
NSPredicate query for not containing a specific string
提问by sangony
Looked high and low for this one but can't find my answer. I am looking to query core data for all records which are NOT equal to a specified string. For example, all records which are not equal to the current session ID. I have tried these to no avail:
看了这个高低,但找不到我的答案。我希望查询所有不等于指定字符串的记录的核心数据。例如,所有不等于当前会话 ID 的记录。我试过这些都无济于事:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"listingID != %@", [sitListingID objectAtIndex:i]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ NOT CONTAINS[cd] %@",@"listingID", [sitListingID objectAtIndex:i]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ NOT CONTAINS %@",@"listingID", [sitListingID objectAtIndex:i]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"listingID NOT like %@", [sitListingID objectAtIndex:i]];
Nothing works.HEEEEELP!!! ----------------------------------------------------- more code
什么都不起作用。嘿嘿!!!-------------------------------------------------- --- 更多代码
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"ListingRecord" inManagedObjectContext:context];
[request setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"sessionID <> %@", uniqueSessionListings];
[request setPredicate:predicate];
NSError *error = nil;
NSMutableArray *mutableFetchResults = [[context executeFetchRequest:request error:&error] mutableCopy];
回答by Martin R
Your first predicate
你的第一个谓词
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"listingID != %@", sessionID];
should work to find all records where the attribute listingID
is not equal to sessionID
(provided that listingID
and sessionID
have the same type).
应该可以找到属性listingID
不等于的所有记录sessionID
(前提是listingID
并且sessionID
具有相同的类型)。
If both are strings and you want to find all records where listingID
does not containthe string sessionID
as a substring, then this predicate should work:
如果两者都是字符串,并且您想查找listingID
不包含字符串sessionID
作为子字符串的所有记录,则此谓词应该有效:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (listingID CONTAINS %@)", sessionID];
Use "CONTAINS[cd]" if the string comparison should be done case and diacritical insensitive.
使用“contains [CD]”如果字符串比较应该做的事情况和变音不区分大小写。
NOTE: You can specify the attribute name as an argument, but then you must use %K
instead of %@
as format:
注意:您可以将属性名称指定为参数,但您必须使用%K
代替%@
格式:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (%K CONTAINS %@)", @"listingID", sessionID];