error : mutating method sent to immutable object

PuFPuF Membre
19:31 modifié dans Vos applications #1
Bonjour à  tous,

J'ai l'erreur suivante :
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[NSCFArray replaceObjectAtIndex:withObject:]: mutating method sent to immutable object'

Elle survient à  cette ligne :
[theValue replaceObjectAtIndex:1 withObject:resValeur];

où : theValue est un NSMutableArray, et resValeur est un NSString.

En fait je voudrais changer la valeur qui se trouve en deuxième position de mon theValue avec resValeur (ce qui se trouve dans theValue c'est tous des string).

J'ai déjà  un peut chercher sur le net (est essayer quelques conseilles trouvé par ci par là ), mais toujours nada!

Avez-vous une solution?

Merci beaucoup,
Manu

Réponses

  • zoczoc Membre
    19:31 modifié #2
    dans 1269596421:

    J'ai l'erreur suivante :
    *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[NSCFArray replaceObjectAtIndex:withObject:]: mutating method sent to immutable object'

    Elle survient à  cette ligne :
    [theValue replaceObjectAtIndex:1 withObject:resValeur];

    où : theValue est un NSMutableArray, et resValeur est un NSString.

    theValue est clairement un NSArray et pas un NSMutableArray vu l'erreur  ;)
  • PuFPuF Membre
    19:31 modifié #3
    Salut,

    merci pour la réponse, mais j'avait déjà  vérifier et non, c'est bien un NSMutableArray theValue!

    je ne comprend pas pourquoi l'erreur persiste....  :(
  • CéroceCéroce Membre, Modérateur
    19:31 modifié #4
    Es-tu bien sûr d'avoir écrit [[NSMutableArray alloc] init]; ?
  • zoczoc Membre
    19:31 modifié #5
    dans 1269598896:

    merci pour la réponse, mais j'avait déjà  vérifier et non, c'est bien un NSMutableArray theValue!

    Bah alors il est écrasé quelque part par un NSArray.

    Le système ne se trompe jamais, et s'il dit que l'objet est immutable, c'est qu'il est immutable  ;)
  • AliGatorAliGator Membre, Modérateur
    19:31 modifié #6
    theValue est clairement un NSArray, du moins à  ce moment là . C'est sûr et certain.
    Donc soit tu lui as bien affecté un NSMutableArray au début, mais tu l'as  remplacé par un NSArray plus tard, soit plus probablement tu as mis un NSArray dedans dans la variable.

    Ce n'est pas parce que la variable est déclarée comme étant un NSMutableArray que l'objet qu'il y a dedans est un NSMutableArray.
    En effet, si tu fais
    NSMutableArray* theValue = [[NSArray alloc] initWithObjects:....,nil];
    alors theValue est déclaré comme NSMutableArray certes, mais tu lui affectes comme valeur un objet de type NSArray, et pas NSMutableArray.

    (D'ailleurs pour ce genre de cas, il y a des chances que tu aies un warning qui te soit remonté à  la compilation)
  • zoczoc Membre
    19:31 modifié #7
    dans 1269600628:

    D'ailleurs pour ce genre de cas, il y a des chances que tu aies un warning qui te soit remonté à  la compilation

    Oui, clairement, car c'est NSMutableArray qui dérive de NSArray, pas l'inverse.
  • PuFPuF Membre
    19:31 modifié #8
    Hello à  tous,

    merci beaucoup pour les réponses!

    Vous aviez raison, j'avais mis un NSArray au lieu d'un NSMUtableArray, mais le problème est que cette faute n'étais pas dans le bout de code que je continue à  contrôler mais bien avant (car mon theValue est une copie d'un NSMutableArray d'une autre méthode).

    Donc, merci encore! Et désolé pour le dérangement pour une erreur aussi bête!!
    ;)

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