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
を見ることができるように働いています。
私は、同じ問題を抱えている人の他のトピックを見つけましたが、答えが解決されませんでした。
本当にありがとうございます。
あなたは上司です!ありがとうたくさん:) –
本当に助けてくれてありがとう、しかし、あなたはそれを知っているなぜそれはそうですか? –
@ h.kishanプロジェクトではARCが有効になっており、変数 'coordinates'をローカルとして宣言しています。コンパイラはオブジェクトのスコープが見つからないとすぐにこのインスタンスに解放メッセージを追加します。したがって、インスタンスはすでに解放されており、存在しなくなりました。だからあなたの代理人は働かないでしょう。 変数をグローバルとして宣言すると、変数は親クラスが存在するまで存在します。だからあなたの代議員が呼び出されます。 –