2011-01-30 36 views
6

Có ai biết bất kỳ kiến ​​thức về sử dụng này:Lõi Location khu vực giám sát

- (void) startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy

Tôi cố gắng để thực hiện nó vào dự án của tôi, nhưng:

- (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region

là không bao giờ được gọi là?

Có ai có bất kỳ mã mẫu nào hay biết tại sao điều này xảy ra?

Mã của tôi như sau. Tôi tạo ra một phương pháp như thế này trong lớp học của tôi riêng LocationManager:

- (void) locationManagerStartMonitoringRegion:(CLRegion *)region withAccuracy:(CLLocationAccuracy)accuracy { 
    NSLog(@"Start Monitoring"); 
    [locationManager startMonitoringForRegion:region desiredAccuracy:accuracy]; 
    NSLog(@"Monitored Regions: %i", [[locationManager monitoredRegions] count]); 
} 

sau đó tôi gọi nó là như thế này:

CLLocationCoordinate2D coordinates = CLLocationCoordinate2DMake(51.116261, -0.853758);  
CLRegion *grRegion = [[CLRegion alloc] initCircularRegionWithCenter:coordinates radius:150 identifier:[NSString stringWithFormat:@"grRegion%i", value]]; 

[locationManager locationManagerStartMonitoringRegion:grRegion withAccuracy:kCLLocationAccuracyBest]; 

tôi nhận được NSLog của:

2011-01-30 19 : 52: 26.409 TestingLocation [10858: 307] Bắt đầu theo dõi

2011-01-30 19: 52: 27.103 TestingLocation [10858: 307] Vùng được giám sát:

Nhưng không bao giờ nhận được một NSLog từ:

- (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region  { 
    NSLog(@"Entered Region"); 
} 

hoặc

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

Cảm ơn

+0

Bạn có thể đăng mã bạn đang sử dụng không? Thật khó để giúp đỡ nếu không có bối cảnh. – Jumhyn

+0

Mã hiện đã được thêm vào bài đăng gốc ở trên. – jodm

+0

@jodm vẫn gặp phải sự cố này. bạn đã nhận được một giải pháp cho việc này. bạn có thể kích hoạt didEnterRegion không. vui lòng giúp đỡ với một ví dụ làm việc –

Trả lời

5

Bạn sẽ cần phải di chuyển chứ không phải một chặng đường dài cho những thứ khu vực theo dõi để làm việc . Mức độ chi tiết hiện tại của nó dường như được dựa trên khi nó được chuyển từ tháp này sang tháp khác - trong thử nghiệm của tôi, tôi phải di chuyển một dặm hoặc hơn để đăng ký mà tôi đã dứt khoát rời khỏi một vùng nhỏ mà tôi đã đặt.

+1

Sáng nay trên đường đến văn phòng tôi đã đăng ký khoảng 5 điểm trên đường đi và 3 trong số đó được kích hoạt. Đây là trường hợp chắc chắn. didEnterRegion chỉ được gọi khi thay đổi tháp di động HOẶC có thay đổi đáng kể về vị trí. Điều này không giúp với bối cảnh mà tôi muốn sử dụng theo dõi khu vực: ( – jodm

+0

@jodm, tôi biết điều này là từ hơn một năm trước nhưng có những điều tốt hơn? Tôi có cùng một rắc rối khi tôi có điểm không kích hoạt hoặc Có thể là một cách tốt hơn .. –

+0

Tôi có thể xác nhận rằng giám sát khu vực sử dụng vị trí quan trọng đối với một số dung lượng, tôi tháo rời khung công tác nhị phân và tìm thấy những thứ liên quan đến các cuộc gọi tới vị trí quan trọng. –

0

Tôi phải xem nơi bạn thiết lập phiên bản locationManager của mình. Nhưng như @ Adams Adams đang cố gắng trốn tránh, bạn cần phải đặt lớp hiện tại của bạn làm đại biểu cho locationManager để biết lớp nào sẽ gửi thư trở lại. Nó cũng đơn giản như:

locationManager.delegate = self;

1

tính chính xác được cải thiện trong ios 5.

+0

Bạn có ý thức về những gì đã được sửa chữa không? Tôi vẫn gặp rắc rối ở Eugene Oregon (~ 150.000 người) khiến tôi tin rằng nó dựa trên tháp di động và WiFi. Tất nhiên điều đó sẽ trở nên điên rồ nếu đó là trường hợp như nó sẽ làm cho ** khu vực giám sát ** chỉ hữu ích trong khu vực đô thị dày đặc –

+0

Nó hoạt động trong ios 5 và 6 dựa trên tháp di động và wifi. Nó hoạt động tốt nhất trong khu vực đô thị dày đặc . Những nơi duy nhất tôi có khiếu nại về ứng dụng của tôi là trong khu vực rất hoang vắng (một hòn đảo, bắc canada). –

1

Câu trả lời là:

- (void) startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy 

bị phản đối trong ios 6.o. Thay vào đó hãy sử dụng vùng `- (void) startMonitoringForRegion: (CLRegion *).

Cảm ơn, Abdul`

+0

https://developer.apple.com/library/ios/documentation/CoreLocation/Reference/CLLocationManager_Class/index.html#//apple_ref/occ/instm/CLLocationManager/startMonitoringForRegion:desiredAccuracy: – mcphersonjr

1

Vâng, bạn có thể giám sát nhiều khu vực và mô phỏng vị trí trong Xcode (từ bảng điều khiển phía trên debugger) để kiểm tra xem nó hoạt động hay không. Tôi đã thử nghiệm và nó hoạt động khá trơn tru.