पृष्ठभूमि के साथ RestKit में अस्थायी वस्तुओं के लिए सर्वोत्तम अभ्यास पृष्ठभूमि: मेरे पास एक प्रबंधित ऑब्जेक्ट, कार है। मेरे पास स्थानीयहोस्ट/कार/खोज पर बैठे एक विश्वसनीय खोज एपीआई है। लौटाए गए परिणाम सर्वर की ओर से कार ऑब्जेक्ट्स हैं, लेकिन मैं केवल उस उपयोगकर्ता को सहेजना चाहता हूं जिसे उपयोगकर्ता चुनता है। बाकी कारें जिन्हें मैं खोज से बाहर टैप करते समय त्यागना चाहता हूं।कोर डेटा
पहले तो मुझे सभी की तरह था:
@interface Car : NSManagedObject //<--- managed object
@property (nonatomic, strong) NSNumber* year;
@property (nonatomic, strong) NSString* make;
@property (nonatomic, strong) NSString* model;
@end
@interface TransientCar : NSObject //<--- regular NSObject!
@property (nonatomic, strong) NSNumber* year;
@property (nonatomic, strong) NSString* make;
@property (nonatomic, strong) NSString* model;
@end
मैं REST API खोज मानचित्रण किया गया था खोज परिणाम प्रदर्शित करना नहीं, बल्कि उन्हें संदर्भ के लिए बचत के प्रयोजनों के लिए TransientCar वस्तुओं में परिणाम JSON। डिफ़ॉल्ट रूप से, यदि आप किसी प्रबंधित ऑब्जेक्ट को मैप करते हैं, तो RestKit ऑब्जेक्ट बनाने के लिए अपनी ऑब्जेक्ट सुविधा फैक्ट्री को कॉल करेगा और इसे वर्तमान संदर्भ में डालेंगे (साझा मैनेजर के ऑब्जेक्ट स्टोर के संदर्भ में हार्ड-कोडित, बीटीडब्ल्यू!)
यह असंभव लग रहा था। तो अब मैं सिर्फ NSMutableDictionary उपयोग कर रहा हूँ जब तक उपयोगकर्ता एक विस्तार दृश्य में टैप करता है और के लिए एक असली प्रबंधित वस्तु बचत के लायक कुछ करता है खोज परिणाम डेटा रखने के लिए:
RKObjectMapping* tempCarMapping = [RKObjectMapping mappingForClass:[NSMutableDictionary class]];
[tempCarMapping mapKeyPathsToAttributes:
@"year", @"year",
@"make", @"make",
@"model", @"model",
nil];
यह एक अच्छा अभ्यास है? एनएसएमयूटेबल डिक्शनरी का अस्थायी प्रतिनिधित्व के रूप में उपयोग करते हुए उपयोगकर्ता तब तक ऐसा कुछ करता है जो संदर्भ में एक नई वस्तु डालने की गारंटी देता है? मैं डेटा का प्रतिनिधित्व करने के लिए मूल प्रबंधित ऑब्जेक्ट सबक्लास का उपयोग करने का एक प्रशंसक था, लेकिन किसी भी तरह इसे "नहीं रखना" या कुछ के रूप में ध्वजांकित करने में सक्षम था, लेकिन हर बार जब मैं ऐसा करता हूं तो मुझे लगता है कि मैं ढांचे से लड़ रहा हूं (और दौड़ की स्थिति)। मैं भी एक नया RKObjectManager बनाने और सिर्फ बाद में इसके पूरे संदर्भ को साफ़ करके एक खरोंच/throwaway संदर्भ उपयोग करने की कोशिश, लेकिन RestKit के ActiveRecord श्रेणी के + managedObjectContext विधि वापस जाने के लिए hardcoded है:
[[[RKObjectManager sharedManager] objectStore] managedObjectContext];
उस तरह का कभी उपयोग करने की संभावना scuttles अस्थायी/कचरा डेटा के लिए एक खरोंच संदर्भ।
एनएसओब्जेक्ट से प्राप्त होने वाली एक क्षणिक मॉडल क्लास ठीक है, लेकिन मेरी सबसे बड़ी चिंता एनएसएमएनेज्ड ऑब्जेक्ट संस्करण के साथ क्षणिक मॉडल को अद्यतित रख रही है। यह तकनीकी एक की तुलना में एक कोड रखरखाव चिंता का अधिक है। यह संपादक का अच्छा होगा> एनएसएमएनेज्ड ऑब्जेक्ट सबक्लास उत्पन्न करें "प्रतिबिंबित NSObject subclass के साथ" के लिए एक चेकबॉक्स था। –
निश्चित रूप से - और यदि आपका मॉडल किसी भी आवृत्ति के साथ बदल जाएगा, तो मैंने उल्लिखित अन्य तरीकों में से एक अच्छा विकल्प होगा। –