Probleme pour ajouter un marker GoogleMaps a partir d'un viewController different de celui de la

dams2007dams2007 Membre
juin 2014 modifié dans Objective-C, Swift, C, C++ #1

Bonjour à  tous, je rencontre actuellement quelques difficultés à  pouvoir supprimer et ajouter de nouveaux Marker à  partir d'une mapView Google maps.


 


Je suis capable de pouvoir supprimer le marker à  partir du viewController ou se trouve la map mais si je change de viewController rien à  faire. Je ne peux ni en ajouter un ni en supprimer.


J'ai pourtant bien accés à  tout et ajouter un delegate à  mon autre viewController.


 


Si quelqu'un pouvait me dire ou je fais erreur, ca serait vraiment sympa. Je pense que c'est un principe de fonctionnement simple que je n'ai pas dû encore saisir. Je vous fourni une petite demo que je viens de faire pour vous démontrer le problème.


 


Ps : il y a peut être l'api key a change pour faire tourner la demo.


https://console.developers.google.com


Réponses

  • J'aurais dû ajouter mes classes dans mon post pour être plus clair.


    J'espère que cela vous aidera à  mieux comprendre mon problème.


     


    MainViewController.h



    #import <UIKit/UIKit.h>
    #import <GoogleMaps/GoogleMaps.h>

    @interface MainViewController : UIViewController<GMSMapViewDelegate, CLLocationManagerDelegate> {
    GMSMapView *mapView;
    }
    @property (strong, nonatomic) IBOutlet GMSMapView *mapView;
    - (IBAction)removePine:(id)sender;

    @end



    MainViewController.m



    #import "MainViewController.h"
    #import <GoogleMaps/GoogleMaps.h>

    @interface MainViewController ()

    @end

    @implementation MainViewController
    @synthesize mapView;

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    // Custom initialization
    }
    return self;
    }

    - (void)viewDidLoad
    {
    [super viewDidLoad];
    self.mapView.delegate = self;

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:48.855906
    longitude:2.347587
    zoom:11];

    self.mapView.myLocationEnabled = YES;
    self.mapView.camera = camera;

    GMSMarker *marker = [[GMSMarker alloc] init];
    marker.position = camera.target;
    marker.snippet = @Hello World;
    marker.map = self.mapView;
    }

    - (void)didReceiveMemoryWarning
    {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

    - (IBAction)removePine:(id)sender {
    [self.mapView clear];
    }

    @end


    detailViewController.h



    #import <UIKit/UIKit.h>
    #import "MainViewController.h"

    @interface detailViewController : UIViewController<GMSMapViewDelegate>{
    MainViewController *mainViewController;
    }

    @property (strong, nonatomic) MainViewController *mainViewController;
    - (IBAction)removePine:(id)sender;

    - (IBAction)AddPine:(id)sender;
    @property (weak, nonatomic) IBOutlet UILabel *detailDescriptionLabel;
    @end


    detailViewController.m



    #import "detailViewController.h"
    #import "MainViewController.h"
    #import <GoogleMaps/GoogleMaps.h>

    @interface detailViewController ()

    @end

    @implementation detailViewController
    @synthesize mainViewController;

    - (void)viewDidLoad
    {
    [super viewDidLoad];

    mainViewController.mapView.delegate = self;
    }

    - (void)didReceiveMemoryWarning
    {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

    - (IBAction)removePine:(id)sender {

    [mainViewController.mapView clear];

    }

    - (IBAction)AddPine:(id)sender {
    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:48.855906
    longitude:2.347587
    zoom:11];
    GMSMarker *marker = [[GMSMarker alloc] init];
    marker.position = camera.target;
    marker.snippet = @Hello You;
    marker.map = mainViewController.mapView;
    }
    @end

  • samirsamir Membre

    Bonjour,


     


    J'ai pas regardé on projet mais vu ton code je soupçonne que ton mainViewController  dans le mainViewController est nil. Comment tu passe de mainViewController vers le detailViewController ?


     


    PS :


    Les classes doivent avoir un nom qui commence toujours par une majuscule. (DetailVieController).

  • Bonjour Samir, désolé pour ma réponse tardive


    Pour faire suite à  ta question, je n'ai pas de souci de ce côte là  concernant mon MainViewController car j'arrive afficher des NSlog encapsulé dans une fonction que j'appelle de mon detailViewController; 


    Je passe de MainViewController vers DetailViewController via une segue dans IB.


     


    Ce problème m'a permis de me rendre compte qu'il n'est pas possible d'effectuer des actions sur une Map dans un autre ViewController. En même ça n'est pas très user friendly, car cela pourrait déstabiliser l'utilisateur le fait de faire des actions sur quelque chose qu'ils ne voit pas directement. J'aurais dû y penser avant. Je fait dorénavant toutes mes actions via le viewController de la map. 


    Désolé pour la perte de temps cependant j'espère que mon erreur pourra servir à  d'autres.


     


    Merci encore.


Connectez-vous ou Inscrivez-vous pour répondre.