2009-09-16 12 views
7

मैं कोरडाटा persistentStore में डेटा का एक सेट आयात करने की कोशिश कर रहा हूं। यह केवल पढ़ने वाला डेटा है जो उपयोगकर्ता को रन-टाइम पर प्रस्तुत किया जाएगा।कोरडाटा एक से कई और व्यस्त रिश्ते की समस्या

मेरे पास "श्रेणी" नामक एक इकाई है जिसमें "आइटम" नामक इकाई के साथ एक से अधिक संबंध हैं, जो बदले में एक श्रेणी के साथ एक व्यस्त संबंध है।

जैसा कि मैं संदर्भ में आइटम जोड़ता हूं, मैं उन्हें सही श्रेणी से कैसे जोड़ूं? मैं SQLite डीबी में देख सकता हूं कि यह आइटम तालिका में एक श्रेणी फ़ील्ड जोड़कर किया जाता है, और शायद रिलेशनशिप के लिए श्रेणियों प्राथमिक कुंजी का उपयोग करता है। लेकिन पीके पीछे के दृश्य हैं ... कनेक्शन बनाने के लिए कोई तरीका है?

मैं अपने श्रेणी वर्ग आइटम जोड़ने के लिए CoreData द्वारा उत्पन्न तरीकों देखते हैं कि में देखते हैं, लेकिन मैं यह सोचते हैं कि इन alos के पीछे के दृश्य तरीकों कि CoreData संबंधों को बनाए रखने के लिए अनुमति देते हैं:

@interface Category (CoreDataGeneratedAccessors) 

- (void)addItemObject:(Item *)value; 
- (void)removeItemObject:(Item *)value; 
- (void)addItems:(NSSet *)value; 
- (void)removeItems:(NSSet *)value; 

@end 

मैंने प्रोग्रामिंग मार्गदर्शिका में पढ़ा है कि कोरडाटा स्वचालित रूप से रिश्ते के दूसरी तरफ का ख्याल रखता है, लेकिन मैं यह नहीं समझ सकता कि किसी श्रेणी के प्रारंभिक लिंक को मैं आइटम कैसे जोड़ता हूं।

धन्यवाद

जेके

उत्तर

9

अलग अलग संभावनाएं हैं। आप पहले से ही एक श्रेणी वस्तु (एक के माध्यम से प्राप्त उदाहरण के लिए अनुरोध लाने) है, और अगर यह सोचते हैं चर

Category *category; 
Item *item; 

तो आप बस निम्न कार्य करें:

item.category = category; 

या

[category setValue: category forKey:@"category"]; 

और आप कर चुके हैं, क्योंकि कोर डेटा स्वचालित रूप से व्यस्त रिश्तों को सेट करता है।

आप एक श्रेणी वस्तु नहीं है, तो, या आप निम्न कर एक नया एक सम्मिलित करना चाहते हैं,:

// Create a new instance of the entity 
Category *category = (Category *) [NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:managedObjectContext]; 
// add all of the category properties, then set the relationship 
// for instance set the category name 
[category setValue:@"myCategoryName" forKey:@"name"]; 
[category setValue:item forKey:@"item"]; 

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

[category addItemObject:item]; 

या उलटा:

[item addCategoryObject:category]; 
+0

धन्यवाद, Unforgiven। मैंने पहले से ही किसी अन्य बोर्ड पर किसी अन्य पोस्ट से यह पता लगाया था, लेकिन आपका जवाब घंटी के रूप में स्पष्ट है। इच्छा एप्पल दस्तावेज़ बेहतर थे! अब मुझे सीखना होगा कि किसी दिए गए श्रेणी के लिए आइटम कैसे पुनर्प्राप्त करें और मैं घर मुक्त हूं! जेके – Alpinista

+1

आपको आइटम इकाई से वस्तुओं को लाने के लिए उपयोग किए जाने वाले प्राप्त अनुरोध पर एनएसपी्रेडिकेट को संबद्ध करने की आवश्यकता है। यदि आपकी श्रेणी इकाई श्रेणी के नाम को संपत्ति के रूप में संग्रहीत करती है, तो आप आइटम से श्रेणी में एक-एक रिश्ते का उपयोग करते हैं: NSPredicate * predicate = [NSPredicate predicateWithFormat: @ "category.name LIKE% @", yourCategoryNameStringHere]; बस इस अनुमान को प्राप्त करने के लिए अनुरोध करें जिसे आप आइटम इकाई से वस्तुओं को लाने के लिए उपयोग करते हैं। –

+1

फिर से धन्यवाद, Unforgiven। मैंने पाया कि आप दूसरी दिशा से भी जा सकते हैं: यदि आपके पास श्रेणी है, तो आप श्रेणी की वस्तुओं की संपत्ति के एनएसएससेट से आइटमों की एक श्रृंखला प्राप्त कर सकते हैं। – Alpinista

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