मुझे अपने कोर डेटा स्टोरेज से दो टेबल/मॉडल पर "शामिल" -टाइप ऑपरेशन करने की आवश्यकता है, और मुझे कुछ प्राप्त करने के लिए अच्छे उदाहरण खोजने में मुश्किल हो रही है काम करने के लिए इस तरह।कोर डेटा - सरल जॉइन-प्रकार प्राप्त करें
यह काफी सरल है जो मुझे करने की ज़रूरत है। मेरे पास दो मॉडल/टेबल हैं: स्थान और location_categories, जहां स्थानों में स्थान/प्रतिष्ठान का विवरण होता है (एक अद्वितीय आईडी के साथ), और location_categories तालिका में category_id के संबंधित location_id के साथ होता है। मुझे उन सभी स्थानों का चयन करने की आवश्यकता है, जहां एक श्रेणी_आईडी दी गई है, यह दो टेबल/मॉडल में शामिल हो जाती है। यदि यह सीधे एसक्यूएल था, यह इस प्रकार दिखाई देगा (और इस क्वेरी काम करता है जब मैं यह वास्तविक SQLite DB के खिलाफ चलाए):
// pretend we passed in a catID of 29:
SELECT * FROM zlocation where zlocid in (select zlocid from zloccategory where zcatid = 29)
तो जैसा कि आप देख सकते हैं, यह बहुत सीधी-सपाट है। क्या दो fetches और फॉर-लूप करने के बिना ऐसा करने का कोई तरीका है? ऐसा करने के लिए मेरा वर्तमान उद्देश्य-सी कोड नीचे है, और यह ठीक काम करता है, लेकिन निश्चित रूप से यह बहुत धीमी और अक्षम है, दोनों टेबलों में बहुत सारे डेटा होने के कारण। के लिए-छोरों एक बड़ी मंदी का कारण बन रहे हैं, और मेरे पेट मुझसे कहता है कि यह काम वास्तव में चीजों की DB/कोर-डाटा पक्ष पर किया जाना चाहिए:
- (NSMutableArray *) fetchLocsWithCatID:(NSString *)catID {
NSMutableArray *retArr = [[NSMutableArray alloc] init];
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:MODELNAME_LOCCATEGORIES inManagedObjectContext:context]];
[fetchRequest setPredicate: [NSPredicate predicateWithFormat:@"catID == %@", catID]];
NSError *error;
NSArray *locCats = [context executeFetchRequest:fetchRequest error:&error];
NSArray *allLocsArr = [self fetchAllDataForTable:MODELNAME_LOCATION]; // this retrieves contents of entire table
for (Location *currLoc in allLocsArr) {
for (LocCategory *currLocCat in locCats) {
if ([currLoc.locID isEqualToString:currLocCat.locID]) {
if (![retArr containsObject:currLoc]) {
[retArr addObject:currLoc];
}
}
}
}
return retArr;
}
है कि क्या यह एक एकल के साथ संभव है पर कोई विचार विधेय/लाने? या डुनो .. शायद उद्देश्य-सी कोड के माध्यम से उन दो एनएसएआरआरए में शामिल होने का एक और अधिक प्रभावी तरीका है?
इस पर किसी भी दिशा के लिए अग्रिम धन्यवाद!
इसे सर्वोत्तम उत्तर के रूप में चिह्नित करना, क्योंकि आपने संबंधों को जोड़ने की आवश्यकता के बारे में भी उल्लेख किया है। मॉडल में रिश्तों को लागू करने के बाद भी, यह कुछ ऐसा था जो मुझे अभी भी स्टंप कर चुका था। धन्यवाद! – svguerin3