मैं कोर्डाटा पर नौसिखिया हूं, और मैं एक एक्सएमएल के परिणाम के साथ एक साधारण डेटाबेस बना रहा हूं।

मैं यह देखने के लिए परीक्षण कर रहा हूं कि रिकॉर्ड मौजूद है या नहीं, और यदि नहीं, तो एक नया जोड़ें, और फिर सहेजें, लेकिन जब मैं इसे फिर से करता हूं, तो ई रिकॉर्ड खोजने के बजाय सहेजता रहता है।

इस वर्ग विधि को दो बार (एक्सएमएल से 2 रिकॉर्ड) कहा जाता है और फिर मैं मेल क्लास में सहेजता हूं। गतिविधि आईडी एक एनएसएनंबर है।

मैं क्या गलत कर रहा हूं?

कोड:

+(CompanyActivity *)createActivityWithInfoFromServer:(NSDictionary *)activityDictFromArray  inManagedObjectContext:(NSManagedObjectContext *)context {

     CompanyActivity *companyActivity = nil;

     NSFetchRequest *request = [[NSFetchRequest alloc] init];
     request.entity = [NSEntityDescription entityForName:@"CompanyActivity" inManagedObjectContext:context];
     request.predicate = [NSPredicate predicateWithFormat:@"ActivityID == %@", [activityDictFromArray objectForKey:@"ActivityID"]];

     NSError *error = nil;
     companyActivity = [[context executeFetchRequest:request error:&error] lastObject];

     NSLog(@"activity: %@", companyActivity);

     if (!error && !companyActivity) {
          companyActivity = [NSEntityDescription insertNewObjectForEntityForName:@"CompanyActivity" inManagedObjectContext:context];
          companyActivity.ActivityID = [NSNumber numberWithInt:[[activityDictFromArray objectForKey:@"ActivityID"] integerValue]];
          companyActivity.ActivityDescription_PT = [activityDictFromArray objectForKey:@"ActivityDescription_PT"];
          companyActivity.ActivityDescription_EN = [activityDictFromArray objectForKey:@"ActivityDescription_EN"];
          companyActivity.DateChangedStamp = [NSDate date];
     }
     else
          NSLog(@"no Activity created. Errors: %@", error);

     return companyActivity;
}
0
Rui Lopes 30 जुलाई 2011, 21:28

3 जवाब

सबसे बढ़िया उत्तर

समस्या NSNumber में थी। यह डेटाबेस में रिकॉर्ड सहेजता रहा, लेकिन उन्हें कभी नहीं मिला। मैंने अभी के लिए टाइप सेशन डेटा को NSString में बदल दिया है।

धन्यवाद,

आर एल

2
Rui Lopes 2 अगस्त 2011, 00:31

सबसे पहले चीज़ें, आप request लीक कर रहे हैं। दूसरा, आपको समस्या का पता लगाने के लिए कुछ बुनियादी डिबगिंग करनी चाहिए। कुछ ब्रेकप्वाइंट सेट करें और यह सुनिश्चित करने के लिए अपने फ़ेच का निरीक्षण करें कि आप अपने फ़ेच में जो गतिविधि आईडी डाल रहे हैं वह एक मान्य मान है। सुनिश्चित करें कि आप बाद में बनाए गए ऑब्जेक्ट को सही मानों के साथ ठीक से भर रहे हैं। देखें कि यह सब कैसे होता है और यदि आपकी समस्या का समाधान नहीं हुआ है, तो अपनी प्रगति के साथ प्रश्न में अधिक जानकारी जोड़ें।

1
Paul Tiarks 30 जुलाई 2011, 22:23
हाय पॉल। मैं आईओएस 5 में एआरसी का उपयोग कर रहा हूं। गतिविधि आईडी का एक मूल्य है। मुझे लगता है कि यह संदर्भ से संबंधित हो सकता है, लेकिन मैं किनारे नहीं हूं। मेरे पास एक NSEnumeration है, और इस विधि को जितनी बार मुझे आवश्यकता है, कॉल करने के बाद, मैं [संदर्भ सहेजें] को कॉल करता हूं। मुझे लगता है कि समस्या यहाँ है... लेकिन, उपरोक्त कोड में, क्या सब सही है?
 – 
Rui Lopes
31 जुलाई 2011, 00:26
उपरोक्त कोड सही प्रतीत होता है, (यह मानते हुए कि आपकी त्रुटि वस्तुएं हमेशा शून्य होती हैं) यह अत्यधिक निर्भर है कि किस डेटा पर संचालित किया जा रहा है। यह संभव है कि संदर्भ सहेजते समय आपको कोई त्रुटि मिल रही हो यदि आपके पास मेमोरी ऑब्जेक्ट्स में कोई खराब डेटा है।
 – 
Paul Tiarks
31 जुलाई 2011, 02:04
नमस्ते, कोई त्रुटि नहीं है। मेरे पास एनएसएलओजी है, और कोई भी मुझे त्रुटि नहीं देता है... क्या हम GoogleTalk पर iChat में बात कर सकते हैं, और मैं यहां परिणाम पोस्ट कर सकता हूं? iChat: rui.lopes@me.com googleTalk: rui.ruilopes@gmail.com
 – 
Rui Lopes
31 जुलाई 2011, 02:56

ऐसा प्रतीत नहीं होता है कि आप अपनी नई वस्तुओं को बनाने के बाद वास्तव में उन्हें सहेज रहे हैं। अपने ऑब्जेक्ट निर्माण ब्लॉक में निम्न कोड जोड़ने का प्रयास करें:

[context save:&error];
if(error) {
    NSLog(@"error saving entities: %@", error);
}
0
Seamus Campbell 31 जुलाई 2011, 20:57