2009-07-22 13 views
42

मेरे पास एक कोर डेटा मॉडल है जिसमें एक कार्य इकाई में वैकल्पिक से-कई रिश्तों को छोड़कर बहिष्कार शामिल होते हैं। बहिष्कृत संपत्तियों में से एक संपत्ति शुरू हो गई है, जो एक एनएसडीएट वस्तु है। बहिष्कृत ऑक्करेंस इकाई में कार्य इकाई के लिए एक संबंध अनिवार्य अनिवार्य है।कोर डेटा, एनएसपीडिकेट और कई महत्वपूर्ण

निर्दिष्ट दिन के लिए कार्यों को लाने के लिए, मुझे यह सुनिश्चित करना होगा कि निर्दिष्ट दिन किसी भी बहिष्कृत एक्सेरेंस इकाई की प्रारंभिक संपत्ति के रूप में प्रकट न हो। उप-विधेय मैं उपयोग करने के लिए कोशिश कर रहा हूँ में से एक है इसलिए

NSPredicate *occurrenceIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"(ALL excludedOccurrences.start != %@))", today]; 

जहां आज आज ही दिन, महीने और वर्ष घटकों सहित के लिए एक NSDate वस्तु है। सभी बहिष्कृत घटनाएं शुरू होने वाली संपत्तियों में केवल दिन, महीने और वर्ष के घटक शामिल होते हैं।

इस ठीक करना चाहिए, कम से कम कोर डाटा और NSPredicate के लिए दस्तावेज़ को पढ़ने, मैं निम्न त्रुटि संदेश मिलता है:

न आया हुआ अपवाद 'NSInvalidArgumentException', कारण की वजह से एप्लिकेशन समाप्त: 'असमर्थित विधेय

अगर मैं बराबर विधेय का उपयोग

NSPredicate *occurrenceIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"!(ANY excludedOccurrences.start == %@))", today]; 

कोई अपवाद नहीं फेंक दिया जाता है, फिर भी कोड अपेक्षा के अनुरूप काम नहीं करता है: आज के लिए घटना है, जो बाहर नहीं किया जाना चाहिए, बजाय बाहर रखा गया है।

मुझे यकीन है कि यह भी मामले excludedOccurrences के लिए परीक्षण करने के लिए कैसे नहीं हूँ == शून्य: निम्नलिखित विधेय क्रम अपवाद पर

NSPredicate *nilPredicate = [NSPredicate predicateWithFormat: @"(excludedOccurrences == nil)"]; 

कारणों

करने वाली कई प्रमुख यहाँ अनुमति नहीं

हालांकि, चूंकि बहिष्कृत कार्य संबंध वैकल्पिक है, इसलिए मुझे यह जांचने की भी आवश्यकता है कि यह शून्य है या नहीं।

मैं इससे कैसे निपटूं? पहले ही, आपका बहुत धन्यवाद।

उत्तर

28
आप सभी की मदद से

, मैं अंत में मेरी परिदृश्य के लिए सही विधेय का निर्धारण करने में कामयाब रहे। ऐसा लगता है कि एक एनएसडीएट ऑब्जेक्ट को डबल के रूप में संभाला जाता है, हालांकि, डबल कभी 3.7 की तरह कुछ नहीं होता है, यह हमेशा 3 जैसा होता है।0 इसलिए, निम्नलिखित विधेय सही ढंग से मेरी परीक्षणों में काम करता है:।

NSPredicate *occurrenceIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"([email protected] == 0 || ([email protected] > 0 && NONE excludedOccurrences.start == %@))",thisDate]; 

जहां thisDate केवल दिन, महीने और वर्ष घटकों (युक्त ExcludedOccurrence इकाई के शुरू होने से संपत्ति के मामले में एक NSDate वस्तु है

एक खाली रिश्ते के लिए

परीक्षण मूल रूप से thankyou आपकी मदद के लिए बहुत बहुत एप्पल पर कुछ लोगों द्वारा @count कुल ऑपरेटर का उपयोग किया जाता है, के रूप में सुझाव दिया।

फिर,। मैं अभी भी देख सकते हैं कि प्रलेखन कई में त्रुटिपूर्ण भागों (विशेष रूप से जहां यह कहता है कि सभी ठीक काम करते हैं, इसके बजाए, यह बिल्कुल काम नहीं करता है)।

108

एक खाली रिश्ते की जांच करने के लिए आपको शून्य से कई कुंजी की गणना की तुलना करनी चाहिए।

[NSPredicate predicateWithFormat:@"[email protected] == 0"]; 

अपने subpredicates का सवाल है, हालांकि आप विधेय भर है कि संशोधक कई बार उपयोग कर सकते हैं, ध्यान रखें कि आप केवल अपने अंतिम विधेय में या तो ALL या ANY संशोधक में से एक हो सकता है हो सकता है।

नहीं ठीक: ANY foo.bar = 1 AND ALL foo.baz = 2
ठीक:ANY foo.bar = 1 AND !(ANY foo.baz != 2)

+0

आपके खाली रिलेशनशिप समाधान मेरे लिए दुर्घटनाग्रस्त हो जाते हैं। –

+0

इसके बारे में क्षमा करें, अनुमानित प्रारूप तय किया गया है। जब मैंने पोस्ट किया था, तब मैंने अपनी धारणा का परीक्षण करने के लिए कभी भी परेशान नहीं किया, जाहिर है कि किसी और ने भी नहीं किया। –

+1

यह अविश्वसनीय है कि मैं एक खाली रिश्ते के लिए एक से कई लोगों का परीक्षण करने की कोशिश कर रहा हूं। बहुत खुश है कि आपने इसे यहां पोस्ट किया है! –

8

तो, एक गैर खाली रिश्ते के लिए परीक्षण करने के लिए, यह वास्तव में काम करता है:

[NSPredicate predicateWithFormat:@"[email protected] != 0"] 

समाधान एशले क्लार्क द्वारा दिए गए मुझे "करने के लिए कई प्रमुख यहाँ अनुमति नहीं"

+0

मैंने अपना जवाब सही कर दिया है, मुझे नहीं पता कि जब मैंने लिखा था तो मैं क्या सोच रहा था। मी culpa। –

3

और देने के लिए दुर्घटनाओं स्विफ्ट 2 में, कुछ ऐसा:

request.predicate = NSPredicate(format: " [email protected] != 0") 
संबंधित मुद्दे