2009-11-07 10 views
6

मैं क्या करने की कोशिश कर रहा हूं?प्रक्रियाओं के बीच कोर डेटा स्टोर साझा करने का कोई तरीका है?

  1. एक यूआई प्रक्रिया जो डिस्क पर कोर डेटा स्टोर से डेटा पढ़ती है। डेटा को संपादित करने और डेटा को प्रदर्शित करने की आवश्यकता नहीं होगी।

  2. एक कमांड लाइन प्रक्रिया जो यूआई द्वारा उपयोग की जाने वाली उसी डेटा स्टोर को लिखती है।

क्यों?

ताकि कमांड लाइन प्रक्रिया हर समय चल रहा हो सकता है लेकिन उपयोगकर्ता यूआई प्रक्रिया से बाहर निकलें और अनुप्रयोग के बारे में भूल जाते हैं, जब तक वे डेटा पर कब्जा कर लिया है पर देखने की जरूरत है सकते हैं।

इसे प्राप्त करने का सबसे सरल और सबसे विश्वसनीय तरीका क्या होगा?

मैंने क्या प्रयास किया है?

मैं धागे के बीच एक डेटा दुकान साझा करने पर पढ़ चुके हैं और एक बार पहले इस लागू किया, लेकिन मैं डॉक्स में या वेब प्रक्रियाओं के बीच एक दुकान साझा करने का तरीका यह दर्शाता है पर कुछ भी नहीं मिल रहा।

क्या यह एक ही डेटा स्टोर फ़ाइल पर दोनों प्रक्रियाओं को इंगित करने जैसा आसान है? मैंने संक्षेप में इसका प्रयोग किया है। यह ठीक काम करने के लिए दिखाई दिया, लेकिन मुझे चिंता है कि मैं लॉकिंग आदि के साथ समस्याओं में भाग सकता हूं जब यह वास्तव में तनाव में डाल दिया जाता है।

अंत में

मैं वास्तव में किसी ने मुझे किस दिशा इस के साथ जाने के लिए पर संकेत दे रही है कि सराहना करेंगे। धन्यवाद।

उत्तर

2

यह उन स्थितियों में से एक हो सकता है जिसमें आपको बस इसे आजमाएं और देखें।

जैसा कि मुझे याद है, SQLite (जो डेटा स्टोर है जिसे आप सबसे अधिक उपयोग करना चाहते हैं) फ़ाइल लॉकिंग के लिए तंत्र में बनाया गया है और इसी तरह; इसलिए फ़ाइल की अखंडता को आश्वस्त होने की संभावना है। यदि, दूसरी तरफ, आप CoreData/XML दृष्टिकोण का उपयोग करते हैं, तो आप समस्याओं में भाग ले सकते हैं।

दूसरे शब्दों में; अपनी फ़ाइल के लिए SQLite बैकिंग का उपयोग करें, और आपको शायद ठीक होना चाहिए।

1

आपको अपने आर्किटेक्चर को फिर से सोचने की आवश्यकता है। यदि आप डेटा स्टोर के मालिक के लिए डिमन चाहते हैं, तो अपने जीयूआई ऐप को डिमन से कनेक्ट करें। डेटा स्टोर को साझा करने का प्रयास करना उन कीड़े का एक प्रकार है जिसे आप खोलना नहीं चाहते हैं।

+0

यह जरूरी नहीं है कि यह सच है। एक SQLite आधारित निरंतर कोर डेटा स्टोर तब तक ठीक काम करेगा जब तक कि डिज़नी से कोई बेजिलियन लेखन ऑपरेशन/दूसरा न हो। – bbum

+0

और चूंकि मैंने सचमुच 12 हर 3 सेकंड बचाया है, मुझे लगता है कि "एक bazillion" से कम के रूप में योग्यता! :) –

2

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

Multi-Threading with Core Data ("सामान्य दिशानिर्देशों" में खुले 2) में एक वैध विकल्प के रूप में एकाधिक निरंतर स्टोर corindators का उपयोग कर एप्पल दस्तावेज़। यह एक ही प्रक्रिया में पूरी तरह से समानांतर सीडी स्टैक पर चर्चा करने के लिए होता है, लेकिन यह मान्य है अगर वे पूरी तरह से पता स्थान रिक्त स्थान पर हैं।

+0

धन्यवाद। यह वास्तव में सहायक है। मैं उन प्रक्रियाओं के बीच डेटा पास करने का अनुमान लगाता हूं जिन्हें मैं NSDistributedNotificationCenter या वितरित ऑब्जेक्ट्स का उपयोग करता हूं। मैं बाद की ओर झुका रहा हूँ। http://stackoverflow.com/questions/504122/best-practices-for-passing-data-between-processes-in-cocoa –

+0

निश्चित रूप से, लेकिन अगर सब कुछ लगातार स्टोर के माध्यम से गुज़र रहा है तो आप केवल सहेजते हैं: एक प्रक्रिया में , एक अधिसूचना भेजें, और दूसरे ऐप में दृढ़ता को अद्यतित करें। चेकआउट http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/CoreData/Articles/cdUsingMOs.html#//apple_ref/doc/uid/TP40001803-208900 –

+0

आप या तो वितरित अधिसूचनाओं का उपयोग कर सकते हैं, एक Kqueue , या संशोधनों के लिए sqlite स्टोर फ़ाइल की निगरानी करने के लिए एक dispatch_source। बस मतदान मत करो। – bbum

2

लगभग दो साल, और मुझे यह करने का एक बेहतर तरीका मिला है।

उत्तर सिंक सेवाओं के साथ झूठ लगता है। मुझे यह भी एहसास नहीं हुआ कि यह अस्तित्व में था! वहाँ कम से इस बारे में एक उत्कृष्ट पोस्ट है:

http://www.timisted.net/blog/archive/core-data-and-sync-services/

मैं अभी तक अपने एप्लिकेशन के साथ यह कोशिश की नहीं है, लेकिन यह दो प्रक्रियाओं या अनुप्रयोगों के बीच एक कोर डेटा संग्रह को साझा करने के एक शानदार तरीका की तरह लगता है।

यदि मुझे कोई प्रदर्शन समस्याएं आती हैं, तो मैं तदनुसार यह उत्तर अपडेट करूंगा, लेकिन ऐसा लगता है कि ऐप्पल इसे करने का अनुशंसित तरीका है।

+0

सिंक सेवा को iCloud के पक्ष में छोड़ दिया गया प्रतीत होता है। – stevesliva

+0

इस उत्तर को अब अपडेट करने की आवश्यकता है कि सिंक सेवा को योसामेट के रूप में बहुत अधिक बहिष्कृत किया गया है। इसके अलावा ऐप एक्सटेंशन का परिचय इस सवाल को और भी महत्वपूर्ण बनाता है (यानी मुख्य ऐप और एक्सटेंशन के बीच कोर डेटा स्टोर साझा करना)। – adib

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