2012-06-02 14 views
5

यह वास्तव में मुझे परेशान कर रहा है। उद्देश्य-सी में, मेरे पास Item इकाई है जिसमें बूलियन विशेषता Deleted है। मैं हां में Deleted या 1.मैं अपने मूल डेटा इकाई की विशेषता के बूलियन मान को अपडेट क्यों नहीं कर सकता?

का मूल्य निर्धारित करने में सक्षम होना चाहते हैं यह मेरा कोड है: नोट करने के लिए

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:managedObjectContext]; 
[fetchRequest setEntity:entity]; 

NSString *itemID = [[fetchedObjects objectAtIndex:(int)[currentTable selectedRow]] valueForKey:@"ItemID"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ItemID = %@", itemID]; 
[fetchRequest setPredicate:predicate]; 

NSError *error = nil; 
Item *objectToDelete = [[managedObjectContext executeFetchRequest:fetchRequest error:&error] objectAtIndex:0]; 
if (objectToDelete == nil) { 
    NSLog(@"ERROR"); 
} 

[fetchRequest release]; 

[objectToDelete setValue:[NSNumber numberWithBool:YES] forKey:@"Deleted"]; 

[managedObjectContext save:&error]; 

कुछ है कि मैं सफलतापूर्वक अलग-अलग विशेषताओं को बदलने में सक्षम हूँ; उदाहरण के लिए: मैं Item के गुण Code और Name के अंत में स्ट्रिंग-डीईएल जोड़ता हूं। जब मैं डेटा की एक तालिका देखता हूं, तो उन मानों के लिए स्ट्रिंग्स को संगत रूप से अद्यतन किया जाता है, हालांकि Deleted के लिए मान 0

+0

आपकी इकाई का विवरण कैसा दिखता है? क्या आप मूल अभिन्न प्रकार का उपयोग कर रहे हैं? जब आप मूल्य कॉल करते हैं तो आपको क्या मिलता है ForKey: @ "हटाया गया" –

+0

आइटम के लिए मेरी एंटिटी हेडर फ़ाइल में NSNumber * हटाया गया है। कोर डेटा मॉडल में इसे बूलियन के रूप में सूचीबद्ध किया गया है। जब मैं valueForKey को कॉल करता हूं: चेंज करने के बाद @ "हटाया गया" इसे संपादित करें, यह "0" प्रिंट करता है। – Rail24

+0

क्या आपकी विशेषता को क्षणिक के रूप में घोषित किया गया है? फिर, अद्यतन से पहले और बाद में लॉग स्टेटमेंट डालने का प्रयास करें। मुझे बताएं। –

उत्तर

9

मैं इस विशेषता के लिए एक अलग नाम का उपयोग करने की अत्यधिक अनुशंसा करता हूं। NSManagedObject में पहले से ही इस नाम से संबंधित तरीके हैं (विशेष रूप से -isDeleted) जो संभावित रूप से आपके कस्टम विशेषता नाम के साथ टक्कर में पड़ती है। NSPropertyDescription के लिए the documentation के रूप में कहते हैं:

ध्यान दें कि एक संपत्ति नाम NSObject या NSManagedObject से किसी कोई पैरामीटर विधि नाम के समान नहीं हो सकता है। उदाहरण के लिए, आप संपत्ति को "विवरण" नाम नहीं दे सकते। NSObject पर पर सैकड़ों विधियां हैं जो संपत्ति नामों के साथ संघर्ष कर सकती हैं- और यह सूची फ्रेमवर्क या अन्य पुस्तकालयों से चेतावनी के बिना बढ़ सकती है। आप और शब्दों या वाक्यांशों जो कोको मानदंड के साथ ओवरलैप (जैसे कि "isEditing" के रूप में और "objectSpecifier") ("फ़ॉन्ट", और "रंग" की तरह) बहुत ही सामान्य शब्द से बचना चाहिए।

अपने कोड है काम करें यदि आप अपनी संपत्ति का नाम किसी अन्य संपत्ति/विधि के नाम से टकराए जाने की संभावना नहीं रखते हैं?

+0

यह चाल है। मैंने "हटाए गए" विशेषता को "DeletedBoolean" में बदल दिया। कोड में कुछ प्रतिबिंब और यह अब पूरी तरह से काम करता है। बहुत बहुत धन्यवाद। – Rail24

+0

एक घंटे से अधिक मैंने यह पता लगाने की कोशिश की कि मैं "हटाए गए" संपत्ति को "1" पर क्यों सेट नहीं कर सकता, धन्यवाद। – daleijn