2012-09-21 14 views
31

對此查看高低,但無法找到我的答案。我正在查詢核心數據的所有記錄不等於指定的字符串。例如,所有不等於當前會話標識的記錄。我已經試過這些無濟於事:不含特定字符串的NSPredicate查詢

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

什麼都行不通.HEEEEELP !!! ------------------------------------------------- ----更多的代碼

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]; 
+0

你能提供一個整體的方法?可能是您獲取emtpy數據。 – NeverBe

回答

96

你的第一個謂語

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

應該努力找到所有記錄的屬性listingID不等於sessionID(前提是listingIDsessionID有相同的類型)。

如果兩者是字符串,你想找到其中listingID不包含字符串sessionID爲子的所有記錄,那麼這個謂詞應該工作:

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

使用「contains [CD]」如果字符串比較應該是大寫和變音不敏感的。

:您可以指定屬性名作爲參數,但你必須使用%K代替%@作爲格式:

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

HECK YEAH!那就是訣竅。快速方面的問題,除非我失明瞭,我沒有在Apple Predicate Programming Guide中閱讀你的解決方案。我是否在導遊中錯過它,或者這是否覆蓋在其他地方? (請求將來參考) – sangony

+3

@sangony:當我開始使用Core Data編程時,謂詞也有困難,「Predicate Programming Guide」可能更詳細。按照正確的順序組合所有可能的比較,操作和謂詞有時很困難。你可以說,在「可可謂詞的BNF定義」中說了一切:-) - 我在這裏閱讀了其他人的問題和答案,我學到了很多東西。 –

+1

這很有幫助,但是有沒有辦法將「不包含」運算符添加到「NSPredicateEditorRowTemplate」?有一個'NSContainsPredicateOperatorType',但不是'NSDoesNotContainPredicateOperatorType'(除非我錯過了它)。 – Jon

相關問題