2012-09-21 20 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]]; 

कुछ भी काम नहीं करता है। हेईएलईएल !!! ------------------------------------------------- ---- अधिक कोड

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

सभी रिकॉर्ड जहां विशेषता listingIDsessionID के बराबर नहीं है खोजने के लिए काम करना चाहिए (बशर्ते listingID और sessionID एक ही प्रकार है)।

दोनों तार कर रहे हैं और आप सभी रिकॉर्ड जहां listingID सबस्ट्रिंग के रूप में स्ट्रिंग sessionID शामिल नहीं है खोजने के लिए चाहते हैं, तो इस विधेय काम करना चाहिए:

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

उपयोग "शामिल [सीडी]" अगर स्ट्रिंग तुलना केस और diacritical असंवेदनशील किया जाना चाहिए।

नोट: आप एक तर्क के रूप विशेषता नाम निर्दिष्ट कर सकते हैं, लेकिन फिर आप प्रारूप के रूप में %K बजाय %@ का उपयोग करना चाहिए:

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

हेक यहा! वह चाल है। त्वरित पक्ष प्रश्न, जब तक कि मैं अंधेरा नहीं जा रहा हूं, मैंने ऐप्पल प्रीडिकेट प्रोग्रामिंग गाइड में अपना समाधान नहीं पढ़ा। क्या मुझे गाइड में याद आया या क्या यह कहीं और ढंका हुआ है? (भविष्य के संदर्भ के लिए पूछना) – sangony

+3

@ सैंगनी: जब मैंने कोर डेटा प्रोग्रामिंग के साथ शुरुआत की तो मुझे भविष्यवाणियों के साथ भी कठिनाइयों का सामना करना पड़ा, भविष्यवाणी प्रोग्रामिंग गाइड अधिक विस्तृत हो सकता है। सही क्रम में सभी संभावित तुलनाओं, संचालन और भविष्यवाणियों को गठबंधन करना कभी-कभी मुश्किल होता है। आप कह सकते हैं कि "कोको भविष्यवाणियों की बीएनएफ परिभाषा" में सबकुछ कहा जाता है :-) - मैंने एसओ पर अन्य लोगों के प्रश्नों और उत्तरों को पढ़ने से बहुत कुछ सीखा। –

+1

यह सहायक है लेकिन क्या "NSPredicateEditorRowTemplate' में" शामिल नहीं है "ऑपरेटर जोड़ने का कोई तरीका है? एक 'एनएससीओन्टेंसप्रोजेक्टऑपरेटर टाइप' है लेकिन 'NSDoesNotContainPredicateOperatorType' नहीं है (जब तक कि मैं इसे याद नहीं करता)। – Jon