NSDictionary et NSMutableArray

13»

Réponses

  • schlumschlum Membre
    15:46 modifié #62
    Attention, tu vas battre le record du plus grand nombre de posts d'affilée   :)
  • Philippe49Philippe49 Membre
    15:46 modifié #63
    dans 1217246972:

    Attention, tu vas battre le record du plus grand nombre de posts d'affilée   :)


    Yes,  :o un vrai record  :) .

  • RocouRocou Membre
    15:46 modifié #64
    dans 1217246732:

    Ce qui fait un code :

    @interface .......... {
      NSMutableArray * result;
    }
    ..
    @end

    @implementation ..
    -(void) awakeFromNib
    {
       model=[[NSMutableArray alloc] init];
    }

    ............
    [model removeAllObjects];
    while(![rs isEOF]){
       id rowObject=[rs dictionaryFromRecord];
       [model addObject:rowObject];
       [rs moveNext];
    }
    [tableView reloadData];




    D'accord, cela créée bien le nombre de lignes nécessaires dans ma tableview.
    Mais quand j'essaie d'intégrer cette ligne:
    [rowObject setObject:valeur forKey:@client];

    j'obtiens l'erreur suivante:
    *** -[NSCFDictionary setObject:forKey:]: mutating method sent to immutable object
    Alors que cela fonctionnait avant...

    Concernant, le rafraà®chissement, il manquait effectivement un lien. C'est réglé.
  • schlumschlum Membre
    15:46 modifié #65
    Ben oui, "dictionaryFromRecord" renvoie un NSDictionary*, et non pas un NSMutableDictionary*
  • Philippe49Philippe49 Membre
    juillet 2008 modifié #66
    dans 1217249628:

    Mais quand j'essaie d'intégrer cette ligne:
    [rowObject setObject:valeur forKey:@client];

    Premièrement, cette ligne ne sert à  rien, puis que rowObject est ici un dictionary qui a déjà  une paire (object,key) pour key=@client.
    Tu lui redemande donc de replacer pour la clé @client l'objet qu'il y a déjà  .   
    Inutile.

    dans 1217249628:

    j'obtiens l'erreur suivante:
    *** -[NSCFDictionary setObject:forKey:]: mutating method sent to immutable object

    Ben oui [rs dictionaryForRecord] est sans doute une immutable instance de la classe NSDictionary, alors qu'il faudrait que cela soit un "mutable dictionary" , instance de NSMutableDictionary.
    Si par la suite tu veux que les lignes de ta table view soient mutables, voici le moyen :

    Remplacer 
      NSDictionary rowObject=[rs dictionaryFromRecord];
    par
      NSMutableDictionary * rowObject=[[rs dictionaryFromRecord] mutableCopy];
    rowObject sera alors un NSMutableDictionary.

    dans 1217249628:

    Alors que cela fonctionnait avant...

    Forcément, model contenait des mutable dictionary (voir le awakeFromNib)
  • RocouRocou Membre
    15:46 modifié #67
    dans 1217250280:

    dans 1217249628:

    Mais quand j'essaie d'intégrer cette ligne:
    [rowObject setObject:valeur forKey:@client];

    Premièrement, cette ligne ne sert à  rien, puis que rowObject est ici un dictionary qui a déjà  une paire (object,key) pour key=@client.
    Tu lui redemande donc de replacer pour la clé @client l'objet qu'il y a déjà  .   
    Inutile.

    OK. Comment dois-je faire pour que mes valeurs s'affichent dans ma listview? Car avec le bout de code que tu m'as fourni, il n'y a que des lignes vides. Elles existent, il y en a le nombre prévu mais elle sont "vides"
  • Philippe49Philippe49 Membre
    juillet 2008 modifié #68
    dans 1217251814:

    OK. Comment dois-je faire pour que mes valeurs s'affichent dans ma listview? Car avec le bout de code que tu m'as fourni, il n'y a que des lignes vides. Elles existent, il y en a le nombre prévu mais elle sont "vides"


    Tout est basé sur deux faits qu'il faut vérifier :

    1) Le dictionnaire obtenu par [rs dictionaryFromRecord] a bien une clé client
    Pour le voir mettre NSLog(@%@",[rowObject objectForKey:@client]); dans la boucle while()

    2) La table column a bien pour identifier "client" dans IB
  • RocouRocou Membre
    15:46 modifié #69
    dans 1217252390:

    2) La table column a bien pour identifier "client" dans IB

    Le problème était là ; j'avais oublié de changer "first" par "client".
    Note qu'il faut non seulement que l'identifier soit "client" mais il faut aussi que le title le soit également.
    J'ai même réussi dans la foulée à  afficher l'adresse du client dans ma seconde colonne  8--)


    Je te remercie vraiment beaucoup pour ton aide.


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