Probleme sur addobject dans un Table View

Rvb33Rvb33 Membre
décembre 2011 modifié dans Vos applications #1
Bonjour,

je me suis inspiré d'un tuto qui me semble bien fait:

http://www.tutomobile.fr/liste-et-details-creer-une-application-multivues-23-tutoriel-iphone-n°9/17/02/2011/

Mais lorsque je le le saisie sous Xcode 4 j'ai un problème au moment de l'addObject avec un plantage SIGABRT et le message suivant:

‘-[__NSArrayI addObject:]: unrecognized selector sent to instance



// Ajouter le site web<br />[tabWebSites addObject:newSite];&nbsp; &nbsp; // c&#039;est ici que ça plante<br />[newSite release];<br /> <br />[self dismissModalViewControllerAnimated:YES];






Dans addButtonPressed si je supprime  la ligne "addView.tabWebSites = self.tabWebSites;" ça ne plante pas mais bien entendu rien ne se passe après

- (IBAction) addButtonPressed: (id) sender {<br />	ModifViewController *addView = [[ModifViewController alloc] initWithNibName:@&quot;ModifViewController&quot; bundle:nil];<br /> <br />	// On passe le tableau de sites pour que la nouvelle vue puisse le modifier<br />	addView.tabWebSites = self.tabWebSites; // ICI UN PETITE ERREUR DANS LE CODE CORRECTION CI-DESSOUS<br />&nbsp; &nbsp; &nbsp; &nbsp; addView.websites = self.tabWebSites<br /><br />	UINavigationController *navc = [[UINavigationController alloc] initWithRootViewController:addView];<br />	[self presentModalViewController:navc animated:YES];<br />	[addView release];<br />	[navc release];<br />}


Voyez vous do'u ça peux venir?

Merci de votre aide

Réponses

  • CéroceCéroce Membre, Modérateur
    06:13 modifié #2
    NSArray n'a pas de méthode -[addObject:].
    Mais NSMutableArray, si.
  • Eric P.Eric P. Membre
    06:13 modifié #3
    Oui et comme dirait Ali, il faut voir la doc.

    Le message d'erreur dit clairement que NSArray ne connait pas addObject.

    Car c'est NSMutableArray qui connait addObject.
  • Eric P.Eric P. Membre
    06:13 modifié #4
    dans 1323429663:

    NSArray n'a pas de méthode -[addObject:].
    Mais NSMutableArray, si.


    Mince, je me suis fait griller.
  • Rvb33Rvb33 Membre
    06:13 modifié #5
    Merci mais.....

    Le message retourne bien NSArray....
    MAIS
    dans ce cas précis tous sont déclarés comme NSMutableArray....
    Alors d'où vient la boulette???

    NSMutableArray *tabWebSites;
    NSMutableArray *webSites
  • AliGatorAliGator Membre, Modérateur
    06:13 modifié #6
    du alloc.
  • CéroceCéroce Membre, Modérateur
    06:13 modifié #7
    La boulette est sans doute quand tu instancies:
    NSMutableArray *array = [[NSArray alloc] init];
    
  • Rvb33Rvb33 Membre
    décembre 2011 modifié #8
    Eh bien non le alloc est bien fait ...
    écrit sous xcode 3 tout va bien mais sous xcode 4 j'ai ce problème......
    Quoiqu'il en soit, déjà  un grand merci à  ceux qui m'ont répondu et vont j'espère me répondre à  nouveau  :)

    - (IBAction) save: (id) sender {
    // Récupérer un NSUrl à  partir de la valeur du champ texte
    NSURL *urlSite = [[NSURL alloc] initWithString:urlTextField.text];

    // Créer un nouveau site et affecter les valeurs
    Website *newSite = [[Website alloc] init];
    newSite.webSiteTitle = titleTextField.text;
    newSite.webSiteURL = urlSite;
    newSite.webSiteDescription = descriptionTextField.text;

    // Ne pas oublier de libérer le NSUrl qu'on vient de créer
    [urlSite release];

      [tabWebSites addObject:newSite];
      [newSite release];


    [self dismissModalViewControllerAnimated:YES];
    }
  • Rvb33Rvb33 Membre
    décembre 2011 modifié #9

    Bizarre non?
  • Eric P.Eric P. Membre
    décembre 2011 modifié #10
    Le alloc est peut-être bien fait mais n'y-a-t-il pas un pré-remplissage du tableau avec une fonction renvoyant un NSArray par hasard ?
  • Rvb33Rvb33 Membre
    06:13 modifié #11
    Website est ce pré-remplissage non?:

    #import UIKit/UIKit.h

    @interface Website : NSObject {
        NSString *webSiteTitle;
        NSURL *webSiteURL;
        NSString *webSiteDescription;
    }

    @property (nonatomic,retain) NSString *webSiteTitle;
    @property (nonatomic,retain) NSURL *webSiteURL;
    @property (nonatomic,retain) NSString *webSiteDescription;

    - (id) initWithDictionaryFromPlist: (NSDictionary *) dictionnary;

    @end



  • Eric P.Eric P. Membre
    06:13 modifié #12
    Non, ce n'est pas ce à  quoi je pensais.

    Le tableau n'est rempli qu'avec addObject ou non ?
  • Rvb33Rvb33 Membre
    06:13 modifié #13
    je rempli mon tableau à  partir d'un XML tout est ok, la tableview est parfaitement remplie.
    Ensuite dans une seconde view je vais renseigner les champs puis je fais un addobject pour ajouter les nouveaux éléments à  mon tableau. comme je fais d'habitude.
  • AliGatorAliGator Membre, Modérateur
    06:13 modifié #14
    Je vois pas en quoi le code que tu nous a indiqué indique si le alloc sur le NSMutableArray est bien fait ou pas... vu que dans ton code cité y'a pas le alloc sur le NSMutableArray...
  • Eric P.Eric P. Membre
    06:13 modifié #15
    Oui mais comment "à  partir d'un XML" ? avec addObject ?
  • Rvb33Rvb33 Membre
    06:13 modifié #16
    oui comme clea:


    // Créons un tableau temporaire que nous allons remplir avec un objet Website par NSDictionnary contenu dans le fichier .plist
        // Notez l'utilisation de NSEnumerator pour parcourir un tableau
        NSMutableArray *annotationToAdd = [[NSMutableArray alloc] init];
        NSEnumerator *enumerator = [arrayFromFile objectEnumerator];
        NSDictionary *anObject;
        while ((anObject = [enumerator nextObject])) {
            Annotations *ws = [[Annotations alloc] initWithDictionaryFromPlist: anObject];
            [annotationToAdd addObject: ws];
            [ws release];
        }
  • Eric P.Eric P. Membre
    06:13 modifié #17
    Et après comme passes-tu de "annotationToAdd" à  "tabWebSites" ?
  • Rvb33Rvb33 Membre
    06:13 modifié #18
    simple petite question au passage quel projet utiliser sous xcode 4.2 pour obtenir la classe RootViewController?
    avant il s'agissait de "Navigation Based Application" mais sous xcode 4.2 ce choix n'est plus possible.
    merci
  • Eric P.Eric P. Membre
    06:13 modifié #19
    Ce serait sympa de nous dire si tu as résolu ton problème et si oui comment.
    Sinon cela ne motive pas pour répondre.
  • Rvb33Rvb33 Membre
    06:13 modifié #20
    Tu as raison désolé. Non je n'ai pas résolu mon problème trop pointu pour moi j'y reviendrai plus tard quand j'aurai approfondi mes connaissances.
    Je suis parti sur un autre projet pour me faire les dents plus doucement.
    En tout cas un grand merci de votre aide efficace et sympa
  • Eric P.Eric P. Membre
    06:13 modifié #21
    Ce n'est pas bien de laisser tomber ainsi en cours de route.

    D'autant plus que tu n'as pas répondu à  Ali qui t'a demandé comment était écrit l'alloc de tabWebSites,
    ni à  ma dernière question qui était comment passes-tu de "annotationToAdd" à  "tabWebSites" ?

    Mais bon ceci dit, c'est vrai que, parfois, laisser un problème en plan quelques temps, permet de revenir avec des idées plus claires et de trouver la solution.
  • Rvb33Rvb33 Membre
    06:13 modifié #22
    En fait tout est détaillé dans le tuto que j'ai mis en tête de discussion....
    Merci pour les encouragements à  continuer.
Connectez-vous ou Inscrivez-vous pour répondre.