2011-12-02 19 views
5

कोको जोड़ने के लिए विधेय वर्गों को परिभाषित करता है (NSPredicate, NSExpression, आदि) जो Predicate Programming "कोको में प्रश्नों को निर्दिष्ट की एक सामान्य साधन उपलब्ध कराते हैं।" कक्षाओं का यह सेट मुझे बताता है कि मुझे क्या चाहिए लेकिन एक छोटी सी छोटी आबादी के साथ: मुझे अतिरिक्त ऑपरेटर चाहिए।उपवर्गीकरण NSPredicate ऑपरेटर

NSComparisonPredicate पहले से ही 14 ऑपरेटरों (NSPredicateOperatorType) संभालती है, लेकिन मैं, जोड़ने कहते हैं, अस्थायी ऑपरेटरों ... या ऑपरेटरों जैसे चीजों का प्रतिनिधित्व करने के लिए करना चाहते हैं:

  • "चरहै कम से कमnप्रविष्टियों "(बाइनरी ऑपरेटर)
  • " चरके लिएमूल्य, ज्यादा से ज्यादा,nलगातार दिन है "(त्रिगुट ऑपरेटर)

जाहिर है, मैं इन अपने आप को और जो इस तरह के प्रश्नों पर डेटा मॉडल को लागू करने की आवश्यकता होगी प्रदर्शन किया जाता है इन ऑपरेटरों का समर्थन करना होगा। लेकिन, क्या इसे लागू करने और मौजूदा एनएसपी्रेडिकेट कक्षाओं से लाभ उठाने का कोई तरीका है? चूंकि ऑपरेटर को enum के रूप में परिभाषित किया गया था, मुझे संदेह है कि मैं उस मोर्चे पर विस्तार कर सकता हूं। या मैं इस पर नाव पूरी तरह से याद कर रहा हूँ ?!

उत्तर

7

HavingspentalotoftimeplayingaroundwithNSPredicate, मुझे यकीन है कि यह सबसे बड़ी विचार है नहीं कर रहा हूँ।

सैद्धांतिक रूप से, आप NSPredicate उपवर्ग चाहते हैं, अपने नए प्रारंभकर्ता और गुण बनाते हैं और फिर अपने कस्टम तुलना करने के लिए -evaluateWithObject:substitutionVariables: विधि ओवरराइड।

व्यावहारिक रूप से, यह शायद उससे कहीं अधिक कठिन है।

आप इसके बजाय FUNCTION() का उपयोग करने पर विचार कर सकते हैं। I wrote a blog post about FUNCTION कुछ समय पहले और यह NSExpression के साथ कैसे खेलता है और इसलिए NSPredicate के साथ। निजी तौर पर, मैं शायद इसके साथ जाऊंगा, क्योंकि तब भी आप NSPredicate बनाने के लिए +predicateWithFormat: वाक्यविन्यास का उपयोग कर सकते हैं। ऑपरेटर जोड़ने के लिए उप-वर्ग बनाना आवश्यक रूप से आपको अंतर्निहित पार्सर का उपयोग करने से रोक देगा।

+0

मेरे पास बहुत कुछ पढ़ना है! धन्यवाद! :) –