2011-10-22 11 views
7

वर्तमान में मेरी बचाता के सभी स्मृति करने जा रहे हैं, लेकिन डिस्क (आईओएस) के लिए बाहर नहीं लिखा जा रहा है। मेरा ऐप एक जोड़े मॉडल देखें सामग्री बनाने के लिए इस पर प्रस्तुत किया, जब उपयोगकर्ता सामग्री बनाने के लिए किया जाता है और बचाने के बटन नया मद (NSManagedObject मेरी CoreData मॉडल द्वारा बनाई वर्ग) मैं इसे प्रिंट क्लिक किया जाता है के साथ एक UITableView साथ की स्थापना की है और यह पूरी तरह से भरा हुआ है। इसके तुरंत बाद मैं इसे डिस्क पर सहेजने का प्रयास करता हूं और फ़ील्ड शून्य के अलावा एक ही ऑब्जेक्ट आईडी के साथ एक त्रुटि संदेश उत्पन्न होता है। हालांकि मेरे यूआईटीबल व्यूज़ - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath विधि को कॉल किया जा रहा है जो @"CanEdit" लॉगिंग कर रहा है।CoreData 1570 त्रुटि कोड

किसी को भी मैं गलत क्या कर रहा हूँ देख सकते हैं?

यहाँ कोड

 NSLog(@"newItem %@", newItem); 
    NSError *error; 
    if (![newItem.managedObjectContext save:&error]) { 
     // Handle the error. 
     NSLog(@"%@", error); 
    } 

    if (editItem) { 
     [self.navigationController popViewControllerAnimated:YES]; 
    } else { 
     [self dismissModalViewControllerAnimated:YES];    
    } 

और यहाँ मेरी त्रुटि

2011-10-22 15:24:46.322 App[42115:fb03] newItem <Item: 0x81a4a30> (entity: Item; id: 0x81a0ab0 <x-coredata:///Item/t7F2B54D2-0DCC-4530-88D5-900BE25C7DC23> ; data: { 
    containedIn = "0x6e89010 <x-coredata:///Item/t7F2B54D2-0DCC-4530-88D5-900BE25C7DC22>"; 
    contains =  (
    ); 
    content = a; 
    dateLastUsed = nil; 
    depth = 0; 
    encrypted = 0; 
    favorite = 0; 
    favoritePosition = nil; 
    folder = 0; 
    fullPath = "^Templates^Add Title"; 
    name = a; 
    sortPosition = 0; 
}) 
2011-10-22 15:24:46.323 App[42115:fb03] CanEdit 
2011-10-22 15:24:46.326 App[42115:fb03] Error Domain=NSCocoaErrorDomain Code=1570 "The operation couldn’t be completed. (Cocoa error 1570.)" UserInfo=0x6ecc490  
{NSValidationErrorObject=<Item: 0x6e88fb0> (entity: Item; id: 0x6e89010 <x-coredata:///Item/t7F2B54D2-0DCC-4530-88D5-900BE25C7DC22> ; data: { 
    containedIn = nil; 
    contains =  (
     "0x81a0ab0 <x-coredata:///Item/t7F2B54D2-0DCC-4530-88D5-900BE25C7DC23>" 
    ); 
    content = nil; 
    dateLastUsed = nil; 
    depth = 0; 
    encrypted = 0; 
    favorite = 0; 
    favoritePosition = nil; 
    folder = 1; 
    fullPath = "^Templates^"; 
    name = Templates; 
    sortPosition = 0; 
}), NSValidationErrorKey=content, NSLocalizedDescription=The operation couldn’t be completed. (Cocoa error 1570.)} 
+0

[आईफोन कोर डेटा सहेजते समय अनसुलझा त्रुटि का संभावित डुप्लिकेट] (http://stackoverflow.com/questions/1283960/iphone-core-data-unresolved-error-while-saving) – millimoose

+0

मैंने देखा कि पहले, मुझे पता है यह त्रुटि एक आवश्यक फ़ील्ड के कारण सेट नहीं है, लेकिन मेरा सवाल यह है कि यह तुरंत बाद में सेट नहीं होने के लिए क्यों सेट किया जा रहा है? – xizor

+0

त्रुटि संदेश एक अलग इकाई ('0x81a0ab0') के लिए है जिसे आप लॉगिंग कर रहे हैं (' 0x6e89010') से, और ऐसा लगता है कि एक दूसरे में शामिल है। कोर डेटा समर्थन कैस्केडिंग करता है? यदि ऐसा है, तो इसका मतलब है कि आप वास्तव में एक कॉल के साथ दो वस्तुओं को सहेज रहे हैं, और कंटेनर ऑब्जेक्ट के गुण शून्य हैं। – millimoose

उत्तर

16

है समस्या आप अपने संदर्भ में एक एमओ जो शून्य करने के लिए सेट फ़ील्ड आवश्यक है है है। विशेष रूप से यह NSValidationErrorKey=content कह रहा है जो पिछले NSValidationErrorObject में शून्य के रूप में प्रिंटिंग कर रहा है।

या तो आप एक तर्क त्रुटि जहां मूल्यों को सही ढंग से एमओ में सेट नहीं किया जा रहा है है, या आपको लगता है कि खाना वैकल्पिक बनाने के लिए अपने मॉडल बदलना चाहिए।

+1

धन्यवाद, मुझे पहले पता चला कि त्रुटि कोड का मतलब यही है कि एकमात्र प्रश्न यह है कि मेरी ऑब्जेक्ट सामग्री = ए और नाम = ए से पहले लॉग में सामग्री = nil और name = nil त्रुटि का लॉग क्यों है संदेश और वे एक दूसरे के बाद सही होते हैं। मैं उन्हें newItem.name = @ "टेक्स्ट यहाँ" के साथ सेट कर रहा हूं - क्या यह सही तरीका नहीं है? – xizor

+1

यह सही है। ऐसा लगता है कि आपके पास एक और ऑब्जेक्ट बनाया जा सकता है जिसे सही तरीके से पॉप्युलेट नहीं किया जा रहा है। दो बार जांचें कि आप केवल उन्हीं वस्तुओं की संख्या बना रहे हैं जिनकी आप उम्मीद कर रहे हैं। उपclass की init विधि में एक ब्रेक पॉइंट सेट करें। – logancautrell

+0

धन्यवाद, यही समस्या है जिसे मैंने अनजाने में एक और वस्तु बनाई। – xizor

0

ऊपर अपने त्रुटि उत्पादन से, आप दो अलग अलग वस्तुओं, पता 0x6e89010 पता 0x6e88fb0 के साथ अपने डेटा, एक और युक्त जहां आवश्यक फ़ील्ड nil हैं के साथ एक देखते हैं कि देख सकते हैं।

इस त्रुटि के स्रोत कोड है कि आप पोस्ट न होने में निहित किया जाना चाहिए।

  • मोडल दृश्य नियंत्रक करने के लिए एक संपत्ति के रूप में प्रबंधित वस्तु संदर्भ दर्रा:

    आदेश समस्याओं के इन प्रकार से बचने के लिए मेरे सिफारिश के बाद डिजाइन पैटर्न जो भी एप्पल के क़ौम में प्रयोग किया जाता है का पालन है। यह सलाह दी जाती है कि केवल एक प्रबंधित ऑब्जेक्ट संदर्भ हो।

  • इनपुट नियंत्रक [NSEntityDescription insertNewObjectForEntityForName:entityName inManagedObjectContext:self.managedObjectContext];
  • के साथ शुरू होता है जब उपयोगकर्ता डेटा इनपुट करता है, तो गुणों/विशेषताओं को तुरंत अपने नए ऑब्जेक्ट में असाइन करें।
  • उपयोगकर्ता "सहेजें" हिट करते हैं, तो, [self.managedObjectContext save:&error];
  • साथ परिवर्तनों को सहेजने के उपयोगकर्ता को रद्द करता है, तो [self.managedObjectContext deleteObject:insertedObject];

यह बहुत ही कुशल है और आवारा वस्तु त्रुटियों से बचने जाता है के साथ संदर्भ से वस्तु को हटा दें।

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