Ich versuche, eine Hilfsklasse zu erstellen, um die Koordinaten des Telefons in jeder anderen Klasse leicht zu erhalten. Ich habe ein Tutorial verfolgt, in dem die UIViewController
die <CLLocationManagerDelegate>
implementiert hat und es funktioniert. Ich habe versucht, das gleiche in einem einfachen NSObject
zu tun, aber dann wurde mein Delegierter nicht mehr angerufen.CLLocationManager nicht Delegat in einem NSObject aufrufen
Dies ist der Code, den ich habe:
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
ich es bin Aufruf von
PSCoordinates * coordinates = [[PSCoordinates alloc] init];
Aufruf, wenn Drücken einer Taste. Die Init funktioniert, wie ich den NSLog PSCoordinates init
sehen kann.
Ich habe andere Themen von Menschen mit dem gleichen Problem gefunden, aber keine der Antworten hat es gelöst.
Ihre Hilfe würde wirklich geschätzt werden.
Sie sind ein Chef! Vielen Dank :) –
Danke, es hilft mir wirklich, aber weißt du warum es so ist? –
@ h.kishan Da ARC für Ihr Projekt aktiviert ist und Sie die Variable 'coordinates' als lokal deklarieren. Der Compiler fügt dieser Instanz im nächsten Moment eine Freigabenachricht hinzu, wenn der Bereich des Objekts gefunden wurde. Ihre Instanz ist also bereits freigegeben und existiert nicht mehr. Ihr Delegierter wird also nicht arbeiten. Wenn Sie die Variable als global deklarieren, wird sie existieren, bis ihre Elternklasse existiert. So wird Ihr Delegierter angerufen. –