2010-05-07 16 views
14

तो Core Data Snippets के माध्यम से देख में, मैं निम्नलिखित कोड मिला:कोर डेटा में अलग-अलग मान कैसे प्राप्त करें?

... 
[request setEntity:entity]; 
[request setResultType:NSDictionaryResultType]; 
[request setReturnsDistinctValues:YES]; 
[request setPropertiesToFetch:[NSArray arrayWithObject:@"<#Attribute name#>"]]; 

// Execute the fetch 
NSError *error; 
id requestedValue = nil; // WTF? This isn't defined or used anywhere 
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error]; 
if (objects == nil) { 
    // handle the error 
} 

यह बहुत अच्छा है और मैं क्या जरूरत के लिए एकदम सही लगता है ... लेकिन कैसे एक वास्तव में इसका इस्तेमाल करता है? मुझे लगता है कि यह वापस लौटने वाले शब्दकोश है, मुझे मूल्यों को प्राप्त करने के लिए एक कुंजी की आवश्यकता है - लेकिन कुंजी कहां परिभाषित है? क्या यह "आईडी अनुरोध किया गया है = शून्य" लाइन? यदि हां, तो "अनुरोधित वाल्यू" कुंजी कैसे बनता है? एक्सकोड मुझे "अनुरोधित वैल्यू" घोषणा पर एक अप्रयुक्त चर के बारे में एक कंपाइलर चेतावनी देता है। मुझे लगता है कि मैं यहाँ कुछ याद कर रहा हूँ।

किसी भी सहायता के लिए अग्रिम धन्यवाद।

उत्तर

28

अनुरोध किया गया है वाल्यू कुछ भी नहीं है और जाहिर है इसका उपयोग नहीं किया जा रहा है (शायद यह किसी अन्य उदाहरण का हिस्सा था जिसने & को इस उदाहरण कोड में पेस्ट किया - जो जानता है)। आप इसे अनदेखा कर सकते हैं।

शब्दकोश के लिए कुंजी आपके द्वारा प्राप्त किए गए गुणों के समान हैं और आपके मॉडल में परिभाषित हैं। तो, उदाहरण के लिए, यदि आपके पास तीन गुण परिभाषित, नाम, आयु, फोन नंबर के साथ एक व्यक्ति इकाई है, और आपने केवल नाम का अनुरोध किया है, तो यह आपके शब्दकोशों में डेटा के साथ एकमात्र कुंजी होगी। तो:

[request setEntity:entity]; 
[request setResultType:NSDictionaryResultType]; 
[request setReturnsDistinctResults:YES]; 
[request setPropertiesToFetch:[NSArray arrayWithObject:@"name"]]; 

// Execute the fetch 
NSError *error; 
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error]; 
if (objects == nil) { 
    abort(); 
} 
for(NSDictionary* obj in objects) { 
    NSLog(@"Person: %@", [obj objectForKey:@"name"]); 
} 
// ... 

तो, आप बॉब, सैली, जो, फ्रीडा और मुकदमा नामित अपने डेटा की दुकान में 5 लोग है, तो आप उन नामों का प्रिंट आउट देखना होगा। यदि आप किसी भी अन्य विशेषताओं (उनकी उम्र की तरह) का उपयोग करना चाहते हैं, तो आपको उस सरणी में जोड़ना होगा जिसे आपने setPropertiesToFetch: में सेट किया था।

ज्यादातर मामलों में, संभवतः प्रबंधित ऑब्जेक्ट को पुनर्प्राप्त करना सबसे अच्छा है। ऑब्जेक्ट को गलती कर दी जाएगी ताकि आप वास्तव में विशेषताओं तक पहुंचने तक विशेषताओं को स्मृति में नहीं लाएंगे। इसके अलावा, यदि आप वस्तुओं में परिवर्तन करना चाहते हैं, तो आप उन्हें स्टोर (प्रबंधित वस्तुओं के साथ) तक जारी रख सकते हैं।

+1

बिल्कुल सही - सहायता के लिए धन्यवाद। कोर डेटा स्निपेट वास्तव में उपयोगी हैं, लेकिन यदि आप एक नए उपयोगकर्ता हैं तो वे कल्पना के लिए थोड़ा छोड़ देते हैं। सहायता के लिए धन्यवाद! – Andy

+4

कल्पना के लिए एक "छोटा"? वे कल्पना के लिए सब कुछ छोड़ देते हैं। मुझे लगता है कि हर बार जब मेरा ज्ञान का एकमात्र स्रोत ऐप्पल द्वारा लिखे गए दस्तावेज़ हैं, तो मुझे खुद को डरने का आग्रह होता है। शुक्र है कि जेसन कोको और अन्य जैसे कई हत्यारों के साथ स्टैक ओवरफ्लो है जो एप्पल द्वारा उनके दस्तावेज़ों में लिखे गए अस्पष्ट क्रिप्टोग्राफिक संदेशों को समझने में हमारी सहायता करता है। ऐप्पल बहुत अच्छा उत्पाद करता है लेकिन उनके दस्तावेज़ अनंत वर्ग को बेकार करते हैं + 1. – SpaceDog

+2

ऐसा लगता है कि सेटरेटर्न्स डिस्टिंक वैल्यूज को बदल दिया गया है सेटरेट्सडिस्टिंट रीसेट्स – mishod

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