2011-08-09 7 views
7

मेरे पास एक उचित जटिल आईफोन ऐप है जो एक सर्वर से डेटा लाने और इसे उपयोगकर्ता को प्रदर्शित करने के लिए एपीआई पर निर्भर करता है। मेरे पास लगभग 5 मॉडल कक्षाएं हैं जिनका उपयोग पूरे ऐप में किया जाता है - वे बस एनएसओब्जेक्ट का विस्तार करते हैं।मौजूदा (सादा) मॉडल के साथ आईफोन ऐप में कोर डेटा जोड़ना

मैं मॉडल के लिए कुछ दृढ़ता जोड़ना चाहता हूं, ताकि ऐप के कुछ हिस्सों का उपयोग किया जा सके, भले ही डिवाइस ऑफलाइन हो - भले ही यह मूल रूप से केवल कैशिंग की महिमा हो। मैं केवल अपने मॉडल के कुछ उदाहरणों को कायम रखना चाहता हूं - उदाहरण के लिए, उपयोगकर्ता ने बुकमार्क किया है - और दूसरों को नहीं, उदाहरण के लिए सैकड़ों खोज परिणाम।

क्या कोर डेटा इस के लिए सही समाधान है? जिन कठिनाइयों को मैं देख सकता हूं वे हैं:

  • मुझे इस परियोजना में अपने मॉडल ऑब्जेक्ट्स को तुरंत चालू करने के तरीके को बदलना होगा। मुझे उन्हें संदर्भ के हिस्से के रूप में प्रारंभ करना होगा, जो वास्तव में समझ में नहीं आता है कि वे वास्तव में बाहरी API से आ रहे हैं।
  • मुझे सावधान रहना होगा कि उन उदाहरणों को जारी न रखें जिन्हें मैं नहीं चाहता हूं। यह या तो एक प्रबंधित ऑब्जेक्ट सही होने के बाद यह बनाया (वास्तव में अजीब) को हटाने या उदाहरणों मैं कायम नहीं करना चाहते के लिए एक अलग, गैर लगातार संदर्भ का उपयोग कर के लिए नीचे उबालने के लिए (बेहतर कुछ हद तक अजीब, लेकिन अभी भी) लगता है

मैं उम्मीद कर रहा था कि मैं पूरे मॉडल में अपने मॉडल का उपयोग उस कोड को बदलने के बिना कर सकता हूं जिसे दृढ़ता की देखभाल करने की आवश्यकता नहीं है, लेकिन यह मेरी आवश्यकताओं को समझने योग्य नहीं लगता है। वैकल्पिक रूप से प्रबंधित वस्तुओं का एक नया सेट मेरी मौजूदा वस्तुओं के समानांतर में स्थापित करना है, और केवल दृढ़ता के लिए प्रबंधित ऑब्जेक्ट्स का उपयोग करना है - लेकिन इस तरह की नकल सही समाधान की तरह कभी नहीं लगती है।

क्या मुझे इसमें कोर डेटा को shoehorn करने की कोशिश करनी चाहिए, और यदि हां, तो कैसे? या मुझे बस अन्य विकल्पों को देखना चाहिए - sqlite3 (मुझे जो चाहिए वह थोड़ा जटिल लगता है), उपयोगकर्ता डिफ़ॉल्ट (संभवतः उनके लिए क्या नहीं है), या यहां तक ​​कि धारावाहिक बनाने और फ़ाइलों को अपनी ऑब्जेक्ट लिखने (हैक-आश)।

किसी भी इनपुट के लिए धन्यवाद!

उत्तर

3

NSKeyedArciver/Unarchiver पर नज़र डालें क्यों? मैं कहूंगा कि कोर डेटा डेटाबेस के साथ बहुत बड़ी मात्रा में डेटा के साथ काम करते समय कोर डेटा स्पष्ट समाधान है, लेकिन NSKeyedArchiver मैं मॉडल को बचाने के लिए उपयोग करता हूं। ऐप्पल के दस्तावेज़ here देखें। NSKeyedArchiver का उपयोग करना बहुत आसान आईएमओ है, और आप इसके साथ बहुत कुछ भी स्टोर कर सकते हैं।

+0

धन्यवाद! विश्वास नहीं कर सकता मैं NSKeyArchiver चूक गया। मैं इसे एक शॉट दूंगा - यह वही हो सकता है जो मुझे चाहिए। –

+0

कोई समस्या नहीं, मदद करने में प्रसन्नता (: –

1

अभी आप डेटा ऑब्जेक्ट्स को NSObject के उप-वर्गों के रूप में तुरंत चालू करते हैं। आप किसी अन्य ऑब्जेक्ट का उपयोग यह चुनने के लिए कर सकते हैं कि किसी ऑब्जेक्ट को ManagedObjectModel के उप-वर्ग के रूप में बनाना है या नहीं, और अपने अधिकांश ऐप को उन ऑब्जेक्ट्स से जानकारी तक पहुंचने के लिए उपयोग किए जाने वाले इंटरफ़ेस को परिभाषित करने वाले प्रोटोकॉल का उपयोग करके अनचाहे रखें, फिर id<DataObjectProtocol> प्रकार की ऑब्जेक्ट्स को पास करना । लाने में विफलता एक गैर-स्थानीय वस्तु का संकेत होगा।

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

मैं इसकी लचीलापन, उपयोगिता और अनुकूलन के कारण कोर डेटा का चयन करूंगा। यह वास्तव में सीखने लायक है। मैं sqlite3 दृष्टिकोण की अनुशंसा नहीं करता, आईओएस पर आगे बढ़ने का तरीका कोर डेटा है।यदि आप किसी प्रकार के फाइल स्टोरेज का उपयोग करते हैं तो आपको बैच को पढ़ने और/या लिखने के बारे में सोचना चाहिए क्योंकि आप कई छोटे प्रदर्शन कार्यों को कुछ खराब प्रदर्शन समस्याओं को दबा सकते हैं।

+0

धन्यवाद, कुछ अच्छे विचार! मैं एनएसकेड आर्चिवर को पहले एक शॉट देता हूं, जैसा कि अन्य टिप्पणी में सुझाया गया है, क्योंकि यह आसान दिखता है और इसे प्लग करने के लिए लगभग एक दिन से ज्यादा समय नहीं लेना चाहिए। मेरे पास कुछ प्रदर्शन चिंताएं हैं, अगर यह काम नहीं करती है तो मैं आपके सुझावों के समान कुछ पर वापस आऊंगा। –

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