web-dev-qa-db-ja.com

特定の文字列を含まないためのNSPredicateクエリ

これは高くも低くも見えましたが、答えが見つかりません。指定した文字列と等しくないすべてのレコードのコアデータを照会しようとしています。たとえば、現在のセッション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]];

何も動作しません。 -------------------------------------------------- ---より多くのコード

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];
38
sangony

最初の述語

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"listingID != %@", sessionID];

属性listingIDsessionIDと等しくない(listingIDsessionIDが同じタイプである場合)すべてのレコードを検索するように動作するはずです。

両方が文字列であり、listingID含まない文字列sessionIDを部分文字列として含むすべてのレコードを検索する場合、この述部は機能するはずです。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (listingID CONTAINS %@)", sessionID];

文字列比較を大文字と小文字を区別して区別する必要がある場合は、「CONTAINS [cd]」を使用します。

[〜#〜] note [〜#〜]:属性名を引数として指定できますが、%Kの代わりに%@を形式として使用する必要があります。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (%K CONTAINS %@)", @"listingID", sessionID];
110
Martin R