NSComboBox et ses données

16:55 modifié dans API AppKit #1
Bonsoir à  tous,

Voilà  je viens de passé à  l'instant sur les NSComboBox.
J'ai ma ComboBox qui utilise le dataSource. Le truc basique, je ne sais pas comment ajouter un objet ds ma array  :)beta:
Comme c'est proche de la tableView niveau gestion de donnée j'ai fait comme ceci (en reliant l'action du ComboBox vers ma classe avec "send action : enter only")
// Implem<br />- (int)numberOfItemsInComboBox:(NSComboBox *)aComboBox<br />{<br />	return [genreArray count];<br />}<br /><br />- (id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(int)index<br />{<br />	id theObject;<br />	<br />	theObject = [genreArray objectAtIndex:index];<br />	return theObject;<br />}<br />// Add<br />- (IBAction)addEntrieToComboBox:(id)sender<br />{<br />	// Add the genre to the combo array<br />	[genreArray addObject:[sender stringValue]];<br />	[sender reloadData];<br />	[self saveData];<br />}

Le NSLog m'indique
2005-08-30 20:29:34.859 Trinum[5646] Exception raised during posting of notification.  Ignored.  exception: *** -[NSCFArray addObject:]: mutating method sent to immutable object

Assez surprenant car "genreArray" est une NSMutableArray  ???

Réponses

  • ChachaChacha Membre
    16:55 modifié #2
    dans 1125429809:

    -[NSCFArray addObject:]: mutating method sent to immutable object

    Assez surprenant car "genreArray" est une NSMutableArray  ???


    Vérifie donc le gag classique :
    NSMutableArray* genreArray = [[NSArray alloc] init];
    ou encore
    NSMutableArray* genreArray = ...le résultat d'une méthode qui renvoie un NSArray..

    Ce qui est important, ce n'est pas le type du pointeur, c'est ce que tu mets dedans. Et l'Objective-C est assez permissif pour ne pas t'empêcher de faire n'importe quoi. D'où l'importance d'activer et de ne pas négliger les warnings...

    +
    Chacha
  • fouffouf Membre
    août 2005 modifié #3
    Oui, mais tout dépend de comment tu l'initialises.

    Regarde dans ton init (enfin, là  où tu initialise _genreArray) si tu n'as pas fait un truc du genre [[NSArray alloc] init.... ]; Si oui, il suffit que tu changes le NSArray en NSMutableArray ;)

    [grilled]
    Pourtant, je pensais pouvoir te griller sur ce coup là , Chacha.
    Bon, tant pis :P
  • 16:55 modifié #4
    Merde en effet jsuis un gros gaffeur dsl :(
    genreArray = [NSArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:AudioSongInfosGenreArray]]; // Yes -&gt; Recup Genres<br />
    

    Jsuis trop con :p
  • ChachaChacha Membre
    août 2005 modifié #5
    dans 1125431142:

    Merde en effet jsuis un gros gaffeur dsl :(
    genreArray = [NSArray arrayWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:AudioSongInfosGenreArray]]; // Yes -&gt; Recup Genres<br />
    

    Jsuis trop con :p

    Et que celui qui n'a jamais fait ça lui jette la première :p
    Plus sérieusement, je me répète, mais les warnings sont nos amis (il faut les aimer aussi)
    Pour l'Objective-C, je te conseille le truc ci-joint
    [edit]
    Précision : quand je dis tenir compte des warnings, c'est à  dire que le code compile sans aucun warning !
    [/edit]

    Et pour le C++, j'ai un projet que je compile avec ça :
    g++ -Wall -ansi -pedantic -Werror -Wextra-tokens -Wnewline-eof -Wold-style-cast -Woverloaded-virtual -Wsynth -Wnon-virtual-dtor -Wreorder  -Wimport -Wformat=2 -W -Wextra -Wfloat-equal -Wfour-char-constants -Wundef -Wendif-labels -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wshorten-64-to-32 -Wsign-compare -Wmissing-field-initializers -Wmissing-format-attribute -Wpacked -Wredundant-decls -Winline -Winvalid-pch -Wlong-long -Wvariadic-macros -Wdisabled-optimization
    Bon, mais là  j'exagère un peu, le -Wall -ansi -pedantic est bien en C++

    [Fichier joint supprimé par l'administrateur]
Connectez-vous ou Inscrivez-vous pour répondre.