2013-05-07 9 views
5

他のクラスの電話機の座標を簡単に取得するためのヘルパークラスを作成しようとしています。私はUIViewController<CLLocationManagerDelegate>を実装したチュートリアルに従いました。私は単純なNSObjectで同じことをしようとしましたが、私の代理人はもう呼び出されませんでした。CLLocationManagerがNSObject内でデリゲートを呼び出さない

これは私が持っているコードです:

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 

私は

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

呼び出すことによって、それを呼んでいますボタンを押す。 initはNSLog PSCoordinates initを見ることができるように働いています。

私は、同じ問題を抱えている人の他のトピックを見つけましたが、答えが解決されませんでした。

本当にありがとうございます。

答えて

13

"PSCoordinates * coordinates"をクラス内でグローバルにします。それは動作します:)

+0

あなたは上司です!ありがとうたくさん:) –

+0

本当に助けてくれてありがとう、しかし、あなたはそれを知っているなぜそれはそうですか? –

+4

@ h.kishanプロジェクトではARCが有効になっており、変数 'c​​oordinates'をローカルとして宣言しています。コンパイラはオブジェクトのスコープが見つからないとすぐにこのインスタンスに解放メッセージを追加します。したがって、インスタンスはすでに解放されており、存在しなくなりました。だからあなたの代理人は働かないでしょう。 変数をグローバルとして宣言すると、変数は親クラスが存在するまで存在します。だからあなたの代議員が呼び出されます。 –