2011-06-13 11 views
30

मान लीजिए कि मेरे पास सार इकाई "पशु" नामक कोर डेटा मॉडल है। फिर, मेरे पास ऐसी कई अन्य संस्थाएं हैं जो इस अमूर्त इकाई से प्राप्त होती हैं: "शेर", "कुत्ता", "बिल्ली", आदि। (मैं एक चिड़ियाघर कार्यक्रम विकसित नहीं कर रहा हूं, लेकिन यह समानता उस मुद्दे के लिए अच्छी तरह से काम करती है जो मैं समझा रहा हूं !)कोर डेटा: प्राप्त करने में सार प्रविष्टि

क्या मैं जानना चाहता हूँ है: मैं ऐसा करने से एक ही बार में "सभी जानवरों" को लाने कर सकते हैं:

NSFetchRequest *searchRequest = [[NSFetchRequest alloc] init]; 
[searchRequest setEntity:[NSEntityDescription entityForName:@"Animal" inManagedObjectContext:aContext]]; 

NSArray *matchedObjects = [aContext executeFetchRequest:searchRequest error:nil]; 

मैं समझता हूँ कि वहाँ NSEntityDescription पर तरीकों का निर्धारण करने के एक इकाई एक और से विरासत है कि क्या कर रहे हैं। लेकिन क्या इस मामले में "पशु" की सभी संस्थाओं को पकड़ने का एक तेज़ तरीका है (सार)?

यदि ऊपर दिया गया दृष्टिकोण अमान्य है, तो इसके बारे में जाने का सबसे प्रभावी तरीका क्या है? धन्यवाद!

उत्तर

31

आप निश्चित रूप से उस दृष्टिकोण का उपयोग कर सकते हैं।

आप एक इकाई वंशानुगत पदानुक्रम निर्धारित करते हैं (देखें "इकाई की विरासत"), जब आप के लिए इकाई के रूप में एक सुपर इकाई निर्दिष्ट करें:

एप्पल के Core Data Programming guide से (लेख के नीचे अनुभाग पर स्क्रॉल करें) एक अनुरोध अनुरोध, अनुरोध सुपर-इकाई और उप-संस्थाओं के सभी मिलान उदाहरण देता है। कुछ अनुप्रयोगों में, आप एक सुपर-इकाई को अमूर्त होने के रूप में निर्दिष्ट कर सकते हैं ("सार तत्व" देखें)। अमूर्त इकाई की सभी ठोस उप-इकाइयों के मिलान के उदाहरणों को लाने के लिए, आप इकाई को लाने के लिए इकाई को सार तत्व निर्दिष्ट करने के लिए सेट करते हैं। "सार तत्वों" में वर्णित डोमेन के मामले में, यदि आप ग्राफ़िक इकाई के साथ एक फ़ेच अनुरोध निर्दिष्ट करते हैं, तो fetch सर्कल, टेक्स्टएरिया और रेखा के मिलान उदाहरण देता है।

+0

धन्यवाद! (दस्तावेज़ों के उस हिस्से को याद करने के लिए मेरी माफ़ी। कुछ घंटों के बाद, वे सभी एक साथ दौड़ना शुरू करते हैं।) – Bryan

+0

[यह] (http://stackoverflow.com/a/6920736/832111) उत्तर मुझे विश्वास दिलाता है कि "इकाई विरासत "इसके लिए सही विकल्प नहीं है। –

+0

@ d.ennis यहां प्रश्न "सभी मैं" सभी जानवरों को "ला सकता हूं" ... "नहीं," क्या मैं अपने सभी इकाइयों को अपने मॉडल में एक "वैश्विक" अमूर्त इकाई से प्राप्त कर सकता हूं "। इकाई विरासत का उचित उपयोग होता है और यह बहुत उपयोगी हो सकता है। इसका दुरुपयोग करने से आप उन फायदों को बहुत अच्छी तरह से खो सकते हैं। – octy

2

मैंने कुछ ऐसा ही किया है, हालांकि यह इकाई सार नहीं थी। यह एक मानक इकाई थी (बिना किसी उदाहरण के) और अन्य संस्थाएं जिन्हें मैंने लाया था वे सभी उस इकाई से व्युत्पन्न थे। मैं एक अमूर्त वर्ग के साथ यह प्रयास नहीं किया है, हालांकि, डॉक्स को देखकर ऐसा लगता है कि यह संभव नहीं हो सकता:

Core Data Programming Guide

सार संस्थाओं आप निर्दिष्ट कर सकते कि एक इकाई है सार-कि है, आप उस इकाई को के किसी भी उदाहरण नहीं बनाएंगे। यदि आप इकाइयों की संख्या सामान्य इकाई के विशेषज्ञ हैं जो को तत्काल नहीं होना चाहिए, तो आप आम तौर पर इकाई सार बनाते हैं। उदाहरण के लिए, ड्राइंग एप्लिकेशन में आपके पास ग्राफ़िक इकाई हो सकती है जो x और y निर्देशांक, रंग, और ड्राइंग सीमाओं के लिए गुणों को परिभाषित करती है। आप कभी भी, ग्राफिक को तुरंत चालू नहीं करते हैं। कंक्रीट ग्राफिक की उप-इकाइयां मंडल, टेक्स्टएरिया और रेखा हो सकती हैं।

मेरा सुझाव अमूर्त पशु इकाई के साथ चीजों को सेट करना और इसे एक शॉट देना होगा। यदि यह काम नहीं करता है तो बस पशु इकाई को गैर-सार बनाओ (शब्द मुझे असफल कर रहे हैं, क्या हम इसे क्या कहते हैं? शायद 'कंक्रीट' बेहतर है?) और आपको ठीक होना चाहिए। अगर किसी ने इसे एक अमूर्त वर्ग के साथ किया है तो मैं इसके बारे में सुनना चाहता हूं।