2011-12-21 12 views
6

ट्रिगर नहीं मैं उन स्थलों का दौरा किया है, तो ट्रैक करने के लिए निगरानी क्षेत्रों का उपयोग करने की कोशिश कर रहा हूँ। स्थान प्रबंधक एक MapKitiphone CLLocationmanager क्षेत्र निगरानी कॉलबैक

दृश्य नियंत्रक के viewDidLoad में साथ-साथ एक ViewController में आरंभ नहीं हो जाता:

if (self.locationManager == nil) 
{ 
    //  NSLog(@"creating location manager"); 
    self.locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
} 


NSSet* set=[locationManager monitoredRegions]; 

if ([CLLocationManager regionMonitoringAvailable] && [CLLocationManager regionMonitoringEnabled]) { 
    NSLog(@"region monitoring okay"); 
    NSLog(@"monitored regions: %@",set); 
} 

मैं सही ढंग से और सभी क्षेत्रों "ठीक निगरानी क्षेत्र" NSLogs मिलता है।

क्षेत्रों में से जोड़ें, ताकि

double metres=20.0; 
CLLocationDistance dist=metres; 
CLLocationAccuracy acc=1.0; 

CLRegion *reg=[[CLRegion alloc] initCircularRegionWithCenter:coordinate radius:dist identifier:landmarkObj.landmarkName]; 

[locationManager startMonitoringForRegion:reg desiredAccuracy:acc]; 

की तरह किया जाता है लेकिन कॉलबैक सभी

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 
{ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Entered" 
                message:region.identifier 
                delegate:self 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:nil, nil]; 
    [alert show]; 
} 

- (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region 
{ 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Exited" 
                message:region.identifier 
                delegate:self 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:nil, nil]; 
    [alert show]; 
} 

- (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region 
{ 
    NSLog(@"started monitring for region: %@",region); 
} 

- (void) locationManager:(CLLocationManager *)manager monitoringDidFailForRegion:(CLRegion *)region withError:(NSError *)error 
{ 
    NSLog(@"%@",error); 
} 

ट्रिगर नहीं होते हैं तथापि स्थान अपडेट कर, ठीक काम करता है। बजाय क्षेत्रों के लिए निगरानी के लिए किया didUpdatToLocation:

[locationManager startUpdatingLocation]; 

उम्मीद

अद्यतन के रूप में कॉलबैक didUpdateToLocation से चलाता है। अभी भी जानना चाहता है कि हालांकि इस कार्य नहीं करेगा रुचि रखते हैं, लगता है कि आप अपने ViewController को CLLocationManagerDelegate स्थापित किया था की तरह कुछ क्षेत्र निगरानी

+0

क्या आप इस मुद्दे का समाधान ढूंढ चुके हैं? मुझे एक ही समस्या है और किया गया थास्टार्ट मॉनिटरिंगफोररियन फायरिंग नहीं है। – Das

+0

यह पता चला है कि क्षेत्र की निगरानी सिर्फ मुझे आवश्यक सटीकता नहीं देती है। मैं प्रत्येक didUpdateToLocation कॉलबैक के लिए मैन्युअल जांच कर समाप्त हो गया। यह मेरे लिए व्यवहार्य था क्योंकि मैं केवल 10 क्षेत्रों के लिए ट्रैकिंग कर रहा था – tzl

उत्तर

3

क्षेत्र पर नज़र रखने के सामान कम विवरण के स्तर को स्थिति पर नज़र रखने के लिए है और सेल स्थान सीमाओं पर शुरू हो रहा है, इसलिए यदि आप एक सेल सीमा पार नहीं करते, तो आप अपने क्षेत्रों की जाँच करने के कभी नहीं होगा। मैं एक ही मुद्दों था और इस पर शोध किया और एक अलग वेबसाइट जो इस सेब मंच की ओर इशारा किया इस बारे में एक टिप्पणी की थी:

https://devforums.apple.com/message/251046#251046

आप सभी टिप्पणियों आप यह क्यों काम नहीं कर रहा समझ जाएगा पढ़ें।

मैं चारों ओर जहां मैं अपने खुद के ट्रैक किए गए CLRegions और कब्जा कर लिया CLRegions और उसके बाद जब मैं एक locationManager पाने को रोकने के लिए NSSets परिभाषित एक काम कोशिश कर रहा हूँ: didUpdateToLocation: fromLocation: कॉलबैक, मैं अपने ट्रैक किए गए सेट में सभी क्षेत्रों की जांच देखने के लिए कि मैं क्षेत्र में सेट नहीं था, लेकिन अब ट्रैक किए गए क्षेत्र में है (क्षेत्र में जोड़ें और enterRegion के साथ वापस कॉल करें) या अगर मैं क्षेत्र में था लेकिन अब नहीं हूं (क्षेत्र में से हटाएं और निकास क्षेत्र के साथ वापस कॉल करें)। यह अब प्रगति पर एक काम है।

+0

नहीं, यह मामला नहीं है, क्योंकि मेरे पास एक ही सेल वाहक पर दो अलग-अलग डिवाइस हैं, जिसमें क्षेत्र एक पर काम करते हैं, लेकिन अन्य – uofc

+0

अच्छी तरह से नहीं, हां, यह मामला है। यह पूरा मामला नहीं हो सकता है, क्योंकि इसमें अन्य मुद्दे शामिल हो सकते हैं, लेकिन यह सेल टावर कवरेज और कोशिकाओं को बदलने और इस तरह की चीजों को ट्रिगर करने के लिए घूमता है। यह आमतौर पर जीपीएस का उपयोग नहीं करता क्योंकि जीपीएस महंगा है। शायद इसके लिए बहुत सारी बारीकियों और किनारे के मामलों और वाईफाई और सामान शामिल अन्य चीजें हैं। इस मुद्दे की बेहतर समझ प्राप्त करने के लिए उपरोक्त सेब लिंक पढ़ें। – chadbag

0

साथ सफलता मिली है?

@interface Maps : UIViewController <CLLocationManagerDelegate>{ 
... 
} 
+0

हाँ मैंने \t @interface TrailViewController: UIViewController tzl

+2

यह वास्तव में अप्रासंगिक है। घोषणा में प्रोटोकॉल नहीं डालने से केवल संकलक चेतावनियां और सामान प्रभावित होते हैं लेकिन वास्तविक प्रतिनिधि को आपके प्रतिनिधि को वापस कॉल नहीं करते हैं। – chadbag

0

डीबग का उपयोग का प्रयास करें -> स्थान -> फ्रीवे ड्राइव अनुकरण के लिए, मैं एक समान समस्या है, लेकिन मैं कुछ क्षेत्रों बनाया है और didEnterRegion से अधिक 1.000 मीटर के साथ trigged है ... मैं डॉन 'टी पता है रास्ता .. मैं निर्धारित किया है:

locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation; 
locationManager.distanceFilter = kCLDistanceFilterNone; 
0

क्या आप अपने केंद्र समन्वय के लिए लगा रहे हैं? वह हिस्सा आपके उदाहरण से गुम है। मैंने अन्य उदाहरणों को देखा है जहां वे इसे क्षेत्र के त्रिज्या के साथ संयुक्त रूप से ट्रिगर करने के लिए एक सटीक पर्याप्त समन्वय के साथ भर नहीं रहे हैं। यदि आप 20 मीटर त्रिज्या में ट्रिगर करना चाहते हैं तो आपको एक बहुत सटीक समन्वय दर्ज करना होगा (शायद 5 या 6 दशमलव)।

बाकी सब कुछ बहुत अच्छा लग रहा है।

+0

मैं 6 दशमलव का उपयोग कर रहा हूँ। मुझे सबसे ज्यादा पहेली क्या है किस्टार्ट मॉनिटरिंगफोररियन ट्रिगर नहीं किया जा रहा है: एस – tzl

+0

मैं शुरू करने के लिए एक बड़ा त्रिज्या करने की कोशिश करता हूं, देखें कि क्या इससे मदद मिलती है। मैं अपने ऐपडिलेगेट में सब कुछ ले जाने के बाद ही काम कर रहा था। तब मुझे आवश्यक सभी कॉलबैक मिल गए। –

0

आपको अपने प्लेलिस्ट में NSLocationAlwaysUsageDescription की भी आवश्यकता है, और आपके ऐप में [locationManager requestAlwayAuthorization] को कॉल करने की आवश्यकता है। NSLocationWhenInUseUsageDescription क्षेत्र की निगरानी बंद कर देगा।

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