2012-03-21 13 views
5

में सबक्वायरी मैंने कोर डेटा में निम्न मॉडल स्थापित किया है।एनएसपीडिकेट और एनएसआईएनवालिडअर्गमेंट एक्सेप्शन

Book has a to-many relationship, called toBookOrders, with OrderBook entity. The inverse is called toBook. 
Book has a BOOL value property called isSync. 

मैंने निम्नलिखित NSPredicate सेट अप किया है।

NSEntityDescription* entityDescription = [NSEntityDescription entityForName:@"Book" inManagedObjectContext:moc]; 
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF)"]; 
इस विधेय मैं केवल किताबें है कि सिंक्रनाइज़ नहीं किया गया है और उनकी रिश्तेदार आदेश को आकर्षित करने की जरूरत है के माध्यम से

यह मुझे प्राप्त त्रुटि है।

न आया हुआ अपवाद 'NSInvalidArgumentException', कारण की वजह से एप्लिकेशन समाप्त: 'प्रारूप स्ट्रिंग "isSync == 0 और सबक्वेरी (toBookOrders, $ x, $ x.toBook == स्व)"

पार्स करने में अक्षम

कोई विचार? पहले ही, आपका बहुत धन्यवाद।

उत्तर

24

यहाँ अपने समस्या की जड़ है

  • isSync == 0
  • SUBQUERY(toBookOrders, $x, $x.toBook == SELF)

समस्या यह है कि प्रत्येकएक अनुमान के रूप मेंसही या गलत नहीं है। यह एक संग्रह (एक सरणी) देता है, और एक सरणी सत्य या गलत जैसी चीज नहीं है। इस प्रकार, जब आप भविष्यवाणी करते हैं, तो आपको एक त्रुटि मिल रही है कि यह एक अवैध प्रारूप है, क्योंकि ANDके बाद की सामग्री एक अनुमानित नहीं है। यह बस एक अभिव्यक्ति है।

आप शायद चाहने कर रहे हैं:

@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF)[email protected] > 0" 

यह आपको सभी पुस्तकों को खोजने के लिए एक विधेय देना होगा जहां isSync गलत है और कम से कम से एक पुस्तक के OrderBooks कि पुस्तक है।

+0

आपको बहुत ज्यादा धन्यवाद डेव। अच्छा स्पष्टीकरण। क्या मैं किसी भी परिणाम के साथ एक ही परिणाम तक पहुंच सकता हूं? धन्यवाद। –

+2

@Flex_Addicted हाँ, आप कर सकते हैं ... और किसी भी ToBookOrders.toBook == SELF' –

+0

मैं तुमसे प्यार करता हूँ <3 वास्तव में बहुत उपयोगी! –

-2

अलग isSync == 0 और SUBQUERY अलग NSPredicate रों में, उन्हें एक NSArray में जोड़ने तो [NSCompoundPredicate andPredicateWithSubpredicates:array] का उपयोग उन्हें अपने NSFetchSpecification को पारित करने के लिए एक भी एक में शामिल हो गए हैं। ,

@"isSync == 0 AND SUBQUERY(toBookOrders, $x, $x.toBook == SELF)" 

यदि आप दो subpredicates में है कि विभाजन के रूप में स्कॉट पता चलता है, आप प्राप्त करेंगे::

+0

धन्यवाद। समस्या अब भी वहीं है। शायद subqueries में * SELF * का उपयोग करना संभव नहीं है। धन्यवाद। –

+0

यहां बताया गया है कि मैंने इसका उपयोग कैसे किया है: '[NSPredicate predicateWithFormat: @" सबक्वायरी (childItems, $ child, $ child.column% में% @)। @ Count! = 0 ", arrayOfThingsToMatchOn]'। आत्मनिर्भर होना चाहिए, मुझे लगता है। –

+0

-1 यह अनुमानित प्रारूप में 'AND' का उपयोग करने से अलग नहीं है। –

संबंधित मुद्दे