2013-05-07 15 views
5

Telefonun diğer tüm sınıftaki koordinatlarını kolayca almak için bir yardımcı sınıf oluşturmaya çalışıyorum. UIViewController'un <CLLocationManagerDelegate>'u uyguladığı bir eğiticiyi takip ettim ve işe yaradı. Aynı şeyi basit bir NSObject'da yapmaya çalıştım, ancak o zaman delege artık çağrılmadı.CLLocationManager bir NSObject öğesinde temsilci çağırmıyor

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

zaman arayarak

PSCoordinates.h

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

@interface PSCoordinates : NSObject <CLLocationManagerDelegate> 

@property (nonatomic, retain) CLLocationManager* locationManager; 


@end 

PSCoordinates.m bunu diyorum

#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 

:

Bu

Ben kodudur bir düğmeye basmak. Init, NSLog PSCoordinates init'u görebildiğim gibi çalışıyor.

Aynı problemi olan insanların başka konularını buldum ama cevabın hiçbiri çözemedi.

Yardımınız gerçekten takdir edilecektir.

cevap

13

Sınıfınızda "PSCoordinates * koordinatlarını" global yapın. Çalışacak :)

+0

Sen bir patronsun! Çok teşekkürler :) –

+0

Gerçekten bana yardım edin, Ama biliyor musunuz Neden böyle? –

+4

@ h.kishan ARC projeniz için etkinleştirildiğinden ve 'koordinatları' değişkenini yerel olarak bildiriyorsunuz. Derleyici, nesnenin kapsamını bulduğu bir sonraki an için bu örneğe bir yayın mesajı ekleyecektir. Yani, örneğiniz zaten serbest bırakıldı ve artık yok. Yani temsilciniz işe yaramayacak. Değişkeni global olarak bildirdiğinizde, üst sınıfı var olana kadar var olacaktır. Yani temsilciniz aranacak. –

İlgili konular