2013-05-07 34 views
5

Tôi đang cố tạo lớp trợ giúp để dễ dàng nhận tọa độ của điện thoại ở bất kỳ lớp nào khác. Tôi đã làm theo một hướng dẫn trong đó UIViewController triển khai <CLLocationManagerDelegate> và nó hoạt động. Tôi đã cố gắng làm tương tự trong một đơn giản NSObject, nhưng sau đó đại biểu của tôi đã không được gọi nữa.CLLocationQuản lý không gọi đại biểu trong NSObject

Đây là mã tôi có:

PSCoordinates.h

#import <Foundation/Foundation.h> 
#import <CoreLocation/CoreLocation.h> 

@interface PSCoordinates : NSObject <CLLocationManagerDelegate> 

@property (nonatomic, retain) CLLocationManager* locationManager; 


@end 

PSCoordinates.m

#import "PSCoordinates.h" 

@implementation PSCoordinates 

- (id) init { 
    self = [super init]; 

    if (self) { 
     self.locationManager = [[CLLocationManager alloc] init]; 
     if ([CLLocationManager locationServicesEnabled]) 
     { 
      self.locationManager.delegate = self; 
      self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
      self.locationManager.distanceFilter = 100.0f; 
      NSLog(@"PSCoordinates init"); 
      [self.locationManager startUpdatingLocation]; 
     } 
    } 
    return self; 
} 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"Géolocalisation : %@",[newLocation description]); 
} 

- (void)locationManager:(CLLocationManager *)manager 
     didFailWithError:(NSError *)error 
{ 
    NSLog(@"Géolocalisation (erreur) : %@",[error description]); 

} 


@end 

Tôi gọi nó bằng cách gọi

PSCoordinates * coordinates = [[PSCoordinates alloc] init]; 

khi nhấn một nút. Các init đang làm việc như tôi có thể nhìn thấy NSLog PSCoordinates init.

Tôi đã tìm thấy các chủ đề khác về những người có cùng vấn đề nhưng không có câu trả lời nào được giải quyết.

Trợ giúp của bạn sẽ thực sự được đánh giá cao.

Trả lời

13

Đặt các tọa độ "PSCoordinates *" thành toàn cầu trong lớp học của bạn. Nó sẽ hoạt động :)

+0

Bạn là một ông chủ! Cảm ơn rất nhiều :) –

+0

Cảm ơn nó thực sự giúp tôi, Nhưng bạn có biết Tại sao nó như vậy? –

+4

@ h.kishan Vì ARC được bật cho dự án của bạn và bạn đang khai báo biến 'tọa độ' là địa phương. Trình biên dịch sẽ thêm một thông báo phát hành cho cá thể này vào giây phút tiếp theo khi tìm thấy phạm vi của đối tượng kết thúc. Vì vậy, trường hợp của bạn đã được phát hành và tồn tại không còn nữa. Vì vậy, đại biểu của bạn sẽ không hoạt động. Khi bạn khai báo biến là toàn cầu, biến này sẽ tồn tại cho đến khi lớp cha của nó tồn tại. Vì vậy, đại biểu của bạn sẽ được gọi. –

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