2011-09-15 21 views
18

से बनाए गए NSFetchRequest को सॉर्ट डिस्क्रिप्टर को लागू करना मेरे पास "रेमिंगगेनप्रोजेक्शन" नामक मेरे मूल डेटा मॉडल के भीतर एक fetch अनुरोध परिभाषित किया गया है। मैं उस अनुरोध को निष्पादित करना चाहता हूं और परिणामों को किसी इकाई के गुणों से सॉर्ट करना चाहता हूं।टेम्पलेट

NSFetchRequest *projectionsRequest = [model fetchRequestTemplateForName:@"RemainingGameProjections"]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"confidence" ascending:NO]; 
[projectionsRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 

मुझे इस कोड की यह निम्न संदेश के साथ दुर्घटनाओं पर अमल करने की कोशिश:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Can't modify a named fetch request in an immutable model.' 

मैं डिबगर है कि इस दुर्घटना होता है में पुष्टि की है जब मैं setSortDescriptors विधि पर अमल मेरे कोड इस तरह दिखता है मेरे NSFetchRequest पर। मैं यह समझने में सक्षम नहीं हूं कि ऐसा क्यों होता है।

यहां क्या हो रहा है के लिए कोई स्पष्टीकरण? क्या कोई दूसरा दृष्टिकोण है जिसका उपयोग डेटा को पुनर्प्राप्त करते समय उपयोग किया जाना चाहिए?

उत्तर

35

मुझे अपने आप को सभी जगहों के ऐप्पल दस्तावेज़ में जवाब मिला। चूंकि मेरे fetch अनुरोध में कोई प्रतिस्थापन पैरामीटर नहीं है, इसलिए मैंने fetchRequestFromTemplateWithName के बजाय fetchRequestTemplateForName विधि का उपयोग किया।

टेम्पलेट प्रतिस्थापन चर नहीं है, तो आप या तो:: यह पता चला है के रूप में, कोर डाटा प्रोग्रामिंग गाइड इस कहते हैं

  1. उपयोग fetchRequestFromTemplateWithName: substitutionVariables: और चर के रूप में शून्य से पारित तर्क;
  2. fetchRequestTemplateForName का उपयोग करें: और परिणाम की प्रतिलिपि बनाएँ। यदि आप fetchRequestTemplateForName द्वारा लौटाए गए फ़ेच अनुरोध का उपयोग करने का प्रयास करते हैं, तो यह एक अपवाद उत्पन्न करता है (" एक अपरिवर्तनीय मॉडल में नामित फ़ेच अनुरोध को संशोधित नहीं कर सकता")।

मैं यह करने के लिए मेरे लाने का अनुरोध प्रारंभ संशोधित:

NSFetchRequest *projectionsRequest = [[model fetchRequestTemplateForName:@"RemainingGameProjections"] copy]; 

और अब सब कुछ उम्मीद के रूप में काम करता है।

+0

और मुझे लगता है कि आपने 'projectionsRequest' के लिए एक संबंधित' रिलीज' भी जोड़ा है। –

+12

नहीं - मैं इस परियोजना के लिए एआरसी का उपयोग कर रहा हूं;) –

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