8
votes

CllouerManager StartUpDatantLocation ne fonctionne pas

Alors maintenant, je reçois au moins des rappels avec le code suivant ...

- (void)viewDidLoad {

[super viewDidLoad];
mapView=[[MKMapView alloc] initWithFrame:self.view.frame];
//mapView.showsUserLocation=TRUE;
mapView.delegate=self;
[self.view insertSubview:mapView atIndex:0];

NSLog(@"locationServicesEnabled: %@", [CLLocationManager locationServicesEnabled] ? @"YES":@"NO");
    CLLocationManager *newLocationManager = [[CLLocationManager alloc] init];
    [newLocationManager setDesiredAccuracy:kCLLocationAccuracyBest];
    [newLocationManager setDistanceFilter:kCLDistanceFilterNone];
    [self setLocationManager:newLocationManager];


[[self locationManager] setDelegate:self];
[[self locationManager] startUpdatingLocation];
NSLog(@"Started updating Location");

}


- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {

NSLog(@"Did update to location");
mStoreLocationButton.hidden=FALSE;
location=newLocation.coordinate;

MKCoordinateRegion region;
region.center=location;
MKCoordinateSpan span;
span.latitudeDelta=0.01;
span.longitudeDelta=0.01;
region.span=span;


[mapView setRegion:region animated:TRUE];


}


3 commentaires

ton code semble ok .. problème est silla d'ailleurs


Avez-vous ces problèmes dans le simulateur? Avez-vous activé la simulation de l'emplacement?


Oui, des problèmes de simulateur. J'ai activé l'emplacement de la simulation. Je dois peut-être le tester sur un appareil.


7 Réponses :


1
votes

Eh bien, tout d'abord, vous pouvez JAMAIS STRAND> Soyez sûr que le gestionnaire de localisation est capable de mettre à jour l'emplacement en premier lieu. Il pourrait y avoir une erreur lors de la mise à jour ou vous n'avez pas accès à l'emplacement de l'utilisateur.

Implémentez cette méthode de déléguée CllouerManager et vérifiez l'erreur. P>

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error


1 commentaires

Ne signalant aucune erreur. Je tente ce test sur le simulateur IOS. Cela pourrait-il avoir quelque chose à voir avec ça?



5
votes

Je pense que vous pouvez faire ce travail de deux manières:

  1. Utilisation de CLLOCH CADRE DE CLLOCTION LI> OL>

    Vérifiez que, vous avez adopté la vue Concontroller avec CLLOCITMANAGERDelegate METHODES P>

    @implementation GSViewController
    - (void)viewDidLoad {
    
        [super viewDidLoad];
        mapView=[[MKMapView alloc] initWithFrame:self.view.frame];
        mapView.showsUserLocation=TRUE;
        mapView.delegate=self;
        [self.view insertSubview:mapView atIndex:0];
    
    }
    
    -(void)mapView:(MKMapView *)mapV didUpdateUserLocation:(MKUserLocation *)userLocation
    {
        NSLog(@"map new location: %f %f", userLocation.coordinate.latitude, userLocation.coordinate.longitude);
        location=userLocation.coordinate;
    
        MKCoordinateRegion region;
        region.center=location;
        MKCoordinateSpan span;
        span.latitudeDelta=0.1;
        span.longitudeDelta=0.1;
        region.span=span;
    
        [mapV setRegion:region animated:TRUE];
    }
    @end
    


1 commentaires

Utilisation de la méthode 1, je reçois des rappels, mais le zoom (Span) ne fait pas zoomer vers l'emplacement. J'ai révisé mon code. Peut-être jetez un coup d'oeil et voyez si quelque chose ne va pas?



14
votes

Assurez-vous que vous avez ajouté code> dans le fichier @interface code>.

EDIT P> P> Si le délégué est défini correctement, assurez-vous d'utiliser votre propriété EmplacementManager Code> Propriété: p>

dans le fichier .h code> fichier: p>

self.locationManager = [[CLLocationManager alloc] init];
[self.locationManager setDelegate:self];
[self.locationManager startUpdatingLocation];


1 commentaires

Cela ne ferait que réparer les avertissements, pas grand chose d'autre.



1
votes

Si vous exécutez cela dans le simulateur seulement, vous devrez peut-être l'inviter à modifier les coordonnées. Dans Xcode, il y a une barre au-dessus du volet de sortie de débogage avec la flèche de services de localisation typique. À côté de celle-ci est une liste déroulante des emplacements. Une fois votre application en cours d'exécution, utilisez l'emplacement de simuler et de voir si ce changement déclenche votre code. Puis testez-le sur un véritable appareil.


1 commentaires

C'est assez intelligent. Malheureusement, cela n'a pas fonctionné, mais j'aime l'idée. Je vais juste avoir besoin de tester sur un véritable appareil.



16
votes

Attribuez le cllouerManager à une propriété (forte) de votre classe. (Je suppose que vous utilisez ARC BTW.) En ce moment, le cllouerManager ne dépasse pas la fin de la méthode de la vue ViewDidLoad. Il n'allait donc pas appeler votre méthode de délégation non plus.


3 commentaires

Ne semblait pas faire une différence. Encore une fois, je teste sur le simulateur. Testera un appareil lundi.


Désolé, mon erreur. Vous avez exactement raison. Je reçois maintenant des rappels "A fait mise à jour vers l'emplacement". Mon problème maintenant, c'est que le zoom à l'aide de la plage ne fonctionne pas. Toute autre idée à ce sujet?


+1, a travaillé pour moi. C'était la seule question dans mon cas. À votre santé.



0
votes

Dans mon cas, il n'a pas pénétré sur DidChangeAuthorizorization. J'essayais sur un véritable appareil.

J'ai supprimé l'application du téléphone et installez-la à nouveau. Et ça marche!

J'espère que cela aide quelqu'un :)


0 commentaires

0
votes

pour SWIFT 3

La méthode a changé en:

LOCATION DE FUNCManager (_ Gestionnaire: CllouerManager, DidupDaTelocations Emplacements: [Cllocation])

de:

Func EmplacementManager (Manager: CllouerManager, DidupDaTelocations Emplacements: [AnyObject]!)

Notez le "_" et la distribution des "emplacements" à [Cllocation] plutôt que [anyobject]!

Si vous utilisez l'ancienne méthode, il ne sera jamais appelé et vous ne recevrez pas d'avertissement qu'il a changé.


0 commentaires