2011-03-21 37 views
7

Tôi đang tạo một ứng dụng trên iphone sdk4.0.In đã cập nhật phương thức vị trí chưa bao giờ được gọi. Tôi đã cung cấp mã của tôi dưới đây.Xin vui lòng trợ giúp.Cảm ơn trước.Phương thức didUpdateLocation Không bao giờ được gọi

-(id)init 
{ 
    [super init]; 

    obj=[[UIApplication sharedApplication]delegate]; 

    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    //locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move 
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m 
    [locationManager startUpdatingLocation]; 

    return self; 

} 

-(void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"%f",newLocation.coordinate.latitude); 

    NSLog(@"%f",newLocation.coordinate.longitude); 

    obj=[[UIApplication sharedApplication]delegate]; 

    location=[[CLLocation alloc]initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude]; 
    obj.lattitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.latitude]; 

    obj.longitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.longitude]; 
    //location=[[CLLocation alloc]initWithLatitude:39.9883 longitude:-75.262227]; 
} 
+0

cuối cùng nó hoạt động ... tôi đã không làm bất cứ điều gì.i chỉ cần thực hiện một dự án mới và sao chép tất cả các lớp trong it.i không biết làm thế nào? Nhưng nó đã làm việc .. –

Trả lời

5

HI, mã của bạn có vẻ ổn. bây giờ đây là những lý do có thể có:

trên init của bạn: hãy thử kiểm tra xem có vị tríServicesEnabled hay không.

locationManager = [[CLLocationManager alloc] init]; 
if(locationManager.locationServicesEnabled == NO){ 
    //Your location service is not enabled, Settings>Location Services 
} 

lý do khác, bạn có thể không cho phép nhận vị trí vào ứng dụng của mình. Giải pháp : chỉ cần xóa ứng dụng của bạn khỏi iPhone và xây dựng lại, giờ đây hộp thoại bật lên nên Cho phép vị trí.

sử dụng này để kiểm tra lỗi

- (void)locationManager:(CLLocationManager *)manager 
     didFailWithError:(NSError *)error 
{  
    NSLog(@"Error while getting core location : %@",[error localizedFailureReason]); 
    if ([error code] == kCLErrorDenied) { 
     //you had denied 
    } 
    [manager stopUpdatingLocation]; 
} 

nếu không tất cả có vẻ ok, bạn đã được chạy ios 4.0, có thể được cài đặt trong iPhone 3G và sau đó, nếu nó là iPhone 2g, sau đó vấn đề này có thể xảy ra.

+1

tôi đã thêm vào ứng dụng của tôi .. it works gr8 ... –

1

Có phải -locationManager:didFailWithError: trong đại biểu của bạn được gọi? Có thể bạn đã từ chối truy cập vào dữ liệu vị trí tại một số thời điểm và bây giờ không được nhắc, nhưng quyền truy cập bị từ chối.

0

Sau khi bạn allocinit trình quản lý vị trí của bạn, hãy kiểm tra xem liệu dịch vụ vị trí có được phép hay không. Mã này là từ mẫu mã "LocateMe" của Apple mẫu

if (locationManager.locationServicesEnabled == NO) { 
    UIAlertView *servicesDisabledAlert = [[UIAlertView alloc] initWithTitle:@"Location Services Disabled" message:@"You currently have all location services for this device disabled. If you proceed, you will be asked to confirm whether location services should be reenabled." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [servicesDisabledAlert show]; 
    [servicesDisabledAlert release]; 
} 

Nếu bạn đang thử nghiệm với trình mô phỏng, hãy thử thử nghiệm với thiết bị thay thế. Trình giả lập yêu cầu bật Wi-Fi của máy tính và có thể định vị một trạm gốc WiFi trong cơ sở dữ liệu của các vị trí đã biết.

3

Nếu bạn đang thử nghiệm tính năng này trên trình mô phỏng, nó sẽ không hoạt động.

Điều này xảy ra vì phương thức đó chỉ được gọi khi thiết bị thay đổi vị trí (và trình mô phỏng không bao giờ thay đổi vị trí).

+0

Không .. Tôi không kiểm tra trên Simulator..Tôi đang kiểm tra trên thiết bị iphone –

+0

Bạn đã thử gọi vị trí hiện tại theo cách thủ công và đảm bảo bạn có vị trí hợp lệ? Bạn có thể làm điều này bằng cách sử dụng locationManager.location. – Zebs

+7

Điều này không đúng, bạn có thể mô phỏng chuyển động ngay bây giờ. 'Simulator -> Debug -> Location' – Peres

5

Đảm bảo bạn đã thêm CLLocationManager làm tài sản.

@property (nonatomic, strong) CLLocationManager * locationManager;

+1

Gabriel bạn đã chỉ cho tôi cách tốt.Tôi đã có giải pháp ngay bây giờ. Tôi đã cố gắng gọi phương thức didupdateLocation nhưng nó không gọi ngay cả khi tôi áp dụng mọi thứ ngoại trừ đề xuất của bạn.Tôi đã áp dụng CLLocationManager như một tài sản.Now phương thức ủy nhiệm được gọi và tôi nhận được vị trí cập nhật (Lat, dài) giá trị. – user3182143

+0

Cảm ơn bạn rất nhiều anh em – user3182143

+0

Bạn có thể vui lòng cho tôi biết lý do hoặc giải thích về tài sản CLLocationManager và tại sao không hoạt động mà không có sự thích hợp? – user3182143

18

Hơn nữa trong iOS8 bạn phải có hai điều thêm:

  • Thêm một chìa khóa để uỷ quyền Info.plist và yêu cầu của bạn từ người quản lý vị trí yêu cầu nó để bắt đầu.

    • NSLocationWhenInUseUsageDescription

    • NSLocationAlwaysUsageDescription

  • Bạn cần phải yêu cầu ủy quyền cho các phương pháp vị trí tương ứng.

    • [self.locationManager requestWhenInUseAuthorization]

    • [self.locationManager requestAlwaysAuthorization]

Mã dụ:

self.locationManager = [[CLLocationManager alloc] init]; 
self.locationManager.delegate = self; 
// Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7. 
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { 
    [self.locationManager requestWhenInUseAuthorization]; 
} 
[self.locationManager startUpdatingLocation]; 

Nguồn: http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/

+0

... và nói chung các phương pháp _Always_ không được khuyến khích, hãy sử dụng các phương thức khác nếu bạn không chắc chắn mình đang làm gì. – bshirley

Các vấn đề liên quan