2010-11-11 13 views
11

मैं आईफोन 4 को क्षेत्रों की निगरानी करने और कॉल द्वारा सूचित करने की कोशिश करता हूं, एंटररेगियन या didExitRegion। मैं इसे काम नहीं कर सकता। मैं शायद यहां सभी संबंधित एनरीज़ पढ़ रहा था, साथ ही वेब पर कुछ और लेख .... आईओएस बस मेरे CLLocationManagerDelegate विधियों को कॉल नहीं करता। मैंने क्या किया:startMonitoringForRegion कभी कॉल नहीं किया गया एंटररेगियन/didExitRegion

मेरे पास एक साधारण ऐपडिलेगेट है जो CLEocationManagerDelegate विधियों को एन्टररियन और didExitRegion के लिए लागू करता है। इन तरीकों के भीतर मैं घटना की रिपोर्ट करने के लिए बस UILocalNotification का उपयोग करता हूं। व्यू कंट्रोलर से मैं 1000meters के त्रिज्या के साथ एक क्षेत्र (वर्तमान स्थान) बना देता हूं।

+0

कभी यह तय किया? मैं वास्तव में इसके साथ कुछ मदद की सराहना करता हूं। धन्यवाद! –

उत्तर

2

वही यहां। मैं भी प्रवेश करने के लिए कोशिश कर रहा हूं और मुझे सूचित करता हूं। मैं जो देखता हूं वह यह है कि विधि कभी नहीं बुलाती है। इसलिए मैं (newLocation, oldLocation समारोह) में एक कस्टम की जांच कर रहा हूँ

एक दूरी का आवंटन और:

{ 
distance = [newLocation distanceFromLocation:(your location)]; 
if(distance < 300){ 
[appDelegate Notify:@"Entering "]; 
} 

significantlocationchanges बेकार है !!

+1

कभी यह तय किया? मैं वास्तव में इसके साथ कुछ मदद की सराहना करता हूं। धन्यवाद! –

+0

मुझे जवाब में भी दिलचस्पी है :) क्षेत्रों के साथ भी समस्याएं हैं। – Centurion

41

ये कुछ चीजें हैं जाँच करने के लिए कर रहे हैं:

  1. इससे पहले कि आप अपने कोड में क्षेत्रों की निगरानी शुरू, फोन [CLLocationManager regionMonitoringAvailable] और [CLLocationManager regionMonitoringEnabled] यकीन है कि सेवा उपलब्ध है और उपयोगकर्ता के फ़ोन पर सक्षम बनाने के लिए।

  2. वाकई स्थान प्रबंधक के delegate संपत्ति वस्तु जहां locationManager:didEnterRegion: और/या locationManager:didExitRegion: को क्रियान्वित किया है करने के लिए सेट किया हुआ है।

  3. सुनिश्चित करें कि आपके पास उन विधि हस्ताक्षरों में कोई टाइपो नहीं है। एक छोटी पूंजीकरण त्रुटि इन संदेशों की डिलीवरी विफल होने का कारण बन जाएगी। कॉपी/अपने कोड में इन पेस्ट और सुनिश्चित करें कि वे से मिलान करने के:

    - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 
    { /* Handle enter */ } 
    
    - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region 
    { /* Handle exit */ } 
    
  4. सुनिश्चित करें कि आपके प्रतिनिधि भी लागू करता locationManager:monitoringDidFailForRegion:withError:, के रूप में यह आपको बता सकता है कि क्यों सेवा विफल हो रहा है।

    - (void)locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error 
    { 
        NSLog(@"Region monitoring failed with error: %@", [error localizedDescription]); 
    } 
    
  5. एक कारण यह इस तरह एक निगरानी विफलता हो सकता है कि कोर स्थान क्षेत्रों कोई एप्लिकेशन नजर रखने के लिए अनुमति दी है की संख्या पर कोई सीमा लगाता है। प्रैक्टिस में यह सीमा प्रति ऐप के बारे में दस क्षेत्रों में प्रतीत होती है। तो तुम क्षेत्रों आप stopMonitoringForRegion: का उपयोग कर की जरूरत नहीं है निकालने के लिए, और केवल उपयोगकर्ता निकटतम उन क्षेत्रों पर नजर रखने के लिए सुनिश्चित करें के रूप में एप्पल के Location Awareness Programming Guide द्वारा सिफारिश करते हैं:

    तुम हमेशा विवेकपूर्ण जब पर नजर रखने के लिए क्षेत्रों के सेट को निर्दिष्ट किया जाना चाहिए। क्षेत्र एक साझा सिस्टम संसाधन हैं और सिस्टमव्यापी उपलब्ध क्षेत्रों की कुल संख्या सीमित है। इस कारण से, कोर स्थान एक ही अनुप्रयोग द्वारा निगरानी किए गए क्षेत्रों की संख्या को सीमित करता है जो पर नजर रखता है। इन सीमाओं के आसपास काम करने के लिए, आप को उपयोगकर्ता के तत्काल आसपास के क्षेत्रों में केवल उन क्षेत्रों को पंजीकृत करने पर विचार करना चाहिए। चूंकि उपयोगकर्ता का स्थान बदलता है, तो आप उन क्षेत्रों को हटा सकते हैं जो अब आगे बढ़ रहे हैं और उपयोगकर्ता के पथ पर आने वाले क्षेत्रों को जोड़ सकते हैं।यदि आप एक क्षेत्र पंजीकृत करने का प्रयास करते हैं और स्थान अनुपलब्ध है, तो स्थान प्रबंधक locationManager:monitoringDidFailForRegion:withError: की विधि kCLErrorRegionMonitoringFailure त्रुटि कोड के साथ प्रतिनिधि को कॉल करता है।

  6. उम्मीद है कि स्पष्ट है, लेकिन यकीन है कि आप अपने प्रतिनिधि सेट करने के बाद startMonitoringForRegion:desiredAccuracy: कॉल कर रहे हैं।

  7. जब आप CLRegion ऑब्जेक्ट को प्रारंभ करते हैं जिसे आप initCircularRegionWithCenter:radius:identifier: का उपयोग करके निगरानी कर रहे हैं, तो सुनिश्चित करें कि आप प्रत्येक क्षेत्र के लिए एक अद्वितीय पहचानकर्ता का उपयोग करें।

  8. अपने locationManager:didEnterRegion: और locationManager:didExitRegion: तरीकों ठीक से कहा जाता है, तो कर रहे हैं हो रही है कि एप्लिकेशन को सक्रिय है, लेकिन ओएस पृष्ठभूमि में अपने एप्लिकेशन relaunches नहीं जब बाद यह मार डाला गया है, तो आप ठीक ढंग से अपने स्थान प्रबंधक को प्रारंभ नहीं किया जा सकता है और इसकी स्थापना के उस मामले में प्रतिनिधि। यदि ऐप नहीं चल रहा है तो आप एक पंजीकृत क्षेत्र सीमा पार करते हैं, तो ओएस आपके ऐप को पृष्ठभूमि में लॉन्च करेगा, जिसे आप अपने एप प्रतिनिधि के application:didFinishLaunchingWithOptions: विधि में if ([launchOptions objectForKey:@"UIApplicationLaunchOptionsLocationKey"]]) {} का उपयोग करके पता लगा सकते हैं। आपका ऐप शायद इस तरह की पृष्ठभूमि में लॉन्च होने पर किसी भी विचार को लोड नहीं करेगा, इसलिए आपको यह सुनिश्चित करना होगा कि application:didFinishLaunchingWithOptions: कुछ कोड पथ को आमंत्रित करता है जो आपके स्थान प्रबंधक ऑब्जेक्ट को तुरंत चालू करता है और इस मामले में अपने प्रतिनिधि को सेट करता है। जैसे ही आपके स्थान प्रबंधक की प्रतिनिधि संपत्ति सेट हो जाती है, किसी भी लंबित क्षेत्र की निगरानी घटनाएं वितरित की जाएंगी।

+0

निगरानी डीडफेलफोररियन कुछ सौ क्षेत्रों को जोड़ने की कोशिश करते समय मेरे लिए अपराधी था। महान जवाब, धन्यवाद! –

+0

मेरे मामले में, मॉनिटर क्षेत्र त्रिज्या> = 450 होना चाहिए, अन्यथा didEnter/didLeave विधि को – Jagie

+0

नहीं कहा जाएगा क्षेत्र त्रिज्या> = 450 क्या होना चाहिए? मैं प्रत्येक पुनर्जन्म के लिए त्रिज्या 5 मीटर होना चाहता हूं। मेरे didEnterRegion और didExitRegion फायरिंग कर रहे हैं लेकिन असंगत समय पर; शायद यह क्यों हो सकता है? यह असंगत है कि त्रिज्या 5 मीटर की बजाय 150 मीटर की तरह है, जो मैंने इसे सेट किया है। मदद! – coolcool1994

2

आईओएस 5.1 सिम्युलेटर के साथ एक ज्ञात बग है जहां प्रतिनिधि निगरानी विधियों को संदर्भित नहीं किया जाता है। इसके साथ मेरा अनुभव यह है कि यह पहली विधि ट्रिगर (या तो अंदर या बाहर) को कॉल करेगा लेकिन उसके बाद और भी कॉल नहीं करेगा। मैंने इस तथ्य के लिए ऐप्पल के साथ रडार दायर किए हैं, लेकिन वर्तमान पुनरावृत्ति के लिए ज्यादातर अनदेखा कर दिया गया है। उन्होंने जवाब दिया कि क्या यह आईओएस 6 बीटा में काम कर रहा है, जो यह है। मुझे उम्मीद है कि उन्हें 5.1 के लिए इसे ठीक करने की उम्मीद नहीं है।

आप 5.0 सिम्युलेटर डाउनलोड कर सकते हैं जो अभी भी काम करता है, या आईओएस 6 बीटा डाउनलोड करें (यदि आप एक सशुल्क देव हैं) और वहां अपनी स्थान सामग्री का परीक्षण करें। इसके बाहर, हमें कुछ कोड दिखाना होगा यदि सब कुछ सही तरीके से स्थापित किया गया हो। मैं अनुमान लगा रहा हूं कि क्षेत्र निगरानी आइकन दिखाता है, आप इसे सही कर रहे हैं और केवल सिम्युलेटर बग का शिकार हैं।

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

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