मुझे रिश्ते में जोड़े जाने के बाद किसी ऑब्जेक्ट को लाने के साथ कोई समस्या है। पहली बार जब मैं श्रेणी प्राप्त करता हूं, हमेशा पाया जाता है, तो जब मैंने रिश्ते में जोड़ा तो निम्नलिखित श्रेणियां नहीं मिलीं।रिश्ते में जोड़े जाने के बाद कोर्डटा में कोई ऑब्जेक्ट नहीं मिला
संबंध Many-To-Many
है।
उदाहरण:
- मिले श्रेणी वस्तु
- पैरेंट ऑब्जेक्ट संबंध
- अगला वस्तु
कई श्रेणियों में एक ही
id
है के लिए जोड़ा गया,categoryId = 10
साथ- लायें श्रेणी , नहीं मिला 10
NSManagedObjectContext *private = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; [private setParentContext:self.model.context]; __block NSError *error = nil; [private performBlockAndWait:^{ GPDeal *deal = [EKManagedObjectMapper objectFromExternalRepresentation:dic withMapping:[GPDeal objectMapping] inManagedObjectContext:private]; for (NSDictionary *dic in responseObject[@"response"]) { GPCategory *category; //The first time always found if ((category = [GPCategory MR_findFirstByAttribute:@"catId" withValue:dic[@"mainAttribute"] inContext:private])) { NSLog(@"Found"); [category addDealsObject:deal]; } else { NSLog(@"Not Found"); } } }]; NSError *PrivateError = nil; if (![private save:&PrivateError]) { NSLog(@"Unresolved error %@, %@", PrivateError, [PrivateError userInfo]); abort(); } if (!error) { //Save on main moc [self.model saveWithErrorBlock:^(BOOL success, NSError *error) { if (!success) { NSLog(@"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]); } }]; } else { NSLog(@"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]); }
categoryId = 10
संपादित करें:
हल, मुझे लगता है मेरी समस्या यह थी कि मैं प्रत्येक यात्रा के अंत में मुख्य संदर्भ बचाने के लिए भूल गया था।
NSManagedObjectContext *backgroundMOC = [self.model backgroundMOC:self.model.context];
[backgroundMOC performBlockAndWait:^{
for (NSDictionary *dic in responseObject[@"response"]) {
GPDeal *deal = [EKManagedObjectMapper objectFromExternalRepresentation:dic withMapping:[GPDeal objectMapping] inManagedObjectContext:backgroundMOC];
GPCategory *category;
if ((category = [GPCategory MR_findFirstByAttribute:@"catId" withValue:dic[@"mainAttribute"] inContext:backgroundMOC])) {
NSLog(@"Found with mainAttribute %@", dic[@"mainAttribute"]);
[deal addDealCategoryObject:category];
}
if([backgroundMOC hasChanges]) {
NSError * error;
[backgroundMOC save:&error];
[self.model.context performBlockAndWait:^{
if([self.model.context hasChanges]) {
NSError * error;
[self.model.context save:&error];
}
}];
}
}
}];
'सौदा' वस्तु का कौन सा संदर्भ संबंधित है? ऐसा लगता है कि यह 'निजी' से एक अलग संदर्भ होना चाहिए। आपको विभिन्न संदर्भों में वस्तुओं के बीच संबंध स्थापित नहीं करना चाहिए। प्रबंधित ऑब्जेक्ट आईडी पास करें और फिर 'objectWithID' का उपयोग करके इसे' निजी 'संदर्भ में पुनर्प्राप्त करें। – pbasdf
मैंने पहले ही चेक किया है, लेकिन निजी संदर्भ – brunobasas
के अंदर 'सौदा' बनाया गया है, इसलिए आपकी समस्या केवल caregoryId = 10 के साथ है? पहली बार आपके पास 10 में डिक है [@ "mainAttribute"] यह श्रेणी ढूंढता है और दूसरी बार ऐसा नहीं करता है? तथ्य यह है कि समस्या MR_findFirstByAttribute से नहीं आ रही है, मुझे बताती है कि समस्या डिक [@ "mainAttribute"] में पूर्णांक वाली स्ट्रिंग हो सकती है। क्या आप यह जांचने के लिए एनएसएलओजी (@ "आईडी: -% @ -") देख सकते हैं कि आईडी में पहले या बाद में रिक्त स्थान नहीं हैं? – Mikael