मुझे अपने उपयोगकर्ता का वर्तमान स्थान प्राप्त करने का एक तरीका चाहिए।आईफोन कोर स्थान आर्किटेक्चर - एकाधिक नियंत्रकों में इसका उपयोग कैसे करें
चूंकि किसी उपयोगकर्ता के मित्र हैं, और उनके पास स्थान डेटा भी है, हालांकि मुझे Friend
और User
इकाइयों में, मेरे कोर डेटा डीबी में स्थान फ़ील्ड डालने का सही तरीका है।
अब, यहाँ मैं क्या सोचा है:
स्थान प्रबंधक singelton किसी तरह का है, कि जब भी मैं सटीक स्थान की जरूरत है मैं उसे बताना CLLocationManager
अपडेट शुरू करने के लिए। (जो मेरे प्रबंधक के लिए ज़िम्मेदार है) प्रबंधक डीबी में उपयोगकर्ता स्थान स्थान में स्थान सहेज लेगा, और उपयोगकर्ता में रुचि रखने वाले नियंत्रक। स्थान जानकारी उस डेटा पर केवीओ का उपयोग करके पंजीकरण करेगी। यह मेरे लिए अच्छा लगता है, इस तथ्य के अलावा कि मुझे इस स्थान को प्रत्येक नियंत्रक से सिंगलटन तक पहुंचना है, जिसके लिए सटीक स्थानों की आवश्यकता है (उसे स्थान उत्पन्न करने के लिए कहने के लिए, मैं नहीं चाहता कि स्थान अपडेट हर समय हो) । इसके अलावा मैं सिंगलटन कॉल के समूह के साथ अपने कोड को प्रदूषित न करने का प्रयास करता हूं।
मैं हालांकि यह समझदार हो सकता है शायद मेरी User
वर्ग के भीतर एक संपत्ति के रूप में स्थान प्रबंधक है। (जाहिर है, अगर मैं स्मृति में कुछ उपयोगकर्ता है अभी, वे सभी एक ही स्थान प्रबंधक singelton साझा करेंगे) मैं उपयोगकर्ता वर्ग के लिए एक और तरीका जोड़ देगा और यह "StartGettingLocation
" कहते हैं, और अब जब भी कुछ नियंत्रक वर्तमान सटीक स्थान की जरूरत है , वह निम्न में से एक कर सकते हैं:
- मेरी नियंत्रक में मैं एक उपयोगकर्ता वस्तु (जो अन्य UIViewController द्वारा साथ पारित किया गया था) है, तो मैं सिर्फ अपने '
StartGettingLocation
"विधि और KVO उसके स्थान क्षेत्र कहते हैं। - यदि मेरे पास मेरे नियंत्रक में कोई उपयोगकर्ता ऑब्जेक्ट नहीं है, तो मैं इसे अपने डीबी से प्राप्त करता हूं और उपरोक्त के रूप में करता हूं।
इस ध्वनि सही है?
यदि हां, तो मुझे क्या यकीन नहीं है, क्या मेरे उपयोगकर्ता वर्ग में MyLocationManager का नया सदस्य जोड़ना संभव है (जो प्रबंधित ऑब्जेक्ट पर उप-वर्ग है)? इसे पूरा करने का सही तरीका क्या है?
धन्यवाद
मुझे नहीं लगता कि अपने CoreLocationManager स्थान अपडेट भेजने के लिए जिम्मेदार है है, कि सेब के CLLocationManager जिम्मेदारी है। मैं आपके कोरलोकेशन प्रबंधक को CLLocationManagerDelegate के अनुरूप होने की अपेक्षा करूंगा। फिर यह तय करेगा कि स्थान अपडेट के साथ क्या करना है, अगर इसे डीबी में सहेजना है या इसके साथ एक रिलावंट अधिसूचना पोस्ट करना है। और हां, स्थान केवल वर्तमान लॉग इन उपयोगकर्ता से संबंधित है, इसलिए अन्य नियंत्रक केवीओ बनाना उचित लगता है। उम्मीद है कि मैं आपको सही ढंग से समझ गया। – Idan
आप सही हैं। हमारा CoreLocationManager स्थान अपडेट नहीं भेजता है, यह केवल 'CLLocationManager' के लिए एक रैपर है। हमारे पास प्रबंधक से CLLocationManager इंस्टेंस प्रारंभ/बंद करने के तरीके हैं। हम प्रबंधक पर CLLocation प्रॉपर्टी अपडेट करने के लिए CLLocationManagerDelegate को भी लागू करते हैं। क्षमा करें अगर मैंने यह स्पष्ट नहीं किया। –
ठीक है, तो आप अन्य नियंत्रकों को स्थान परिवर्तन के बारे में कैसे पता चलेगा? क्या आप एक अधिसूचना पोस्ट करते हैं? आपके डीबी में बचाता है और इसे अन्य केवीओ देता है? – Idan