Warning et mutable pas si mutable que ça, 2 questions indépendantes
chaps31
Membre
Salut à tous, j'ai 2 questions pour ce soir...
1) J'ai un warning sur une méthode car il existe une autre méthode portant le même nom, ça n'empêche pas de fonctionner car les 2 méthodes ne font pas partie de la même classe, mais d'une classe Apple et d'un framework dont je me sert mais que je n'ai pas codé(méthode "close")... Je ne peux donc rien y faire, mais est-ce grave docteur ? Merci.
2) J'ai un
Merci
1) J'ai un warning sur une méthode car il existe une autre méthode portant le même nom, ça n'empêche pas de fonctionner car les 2 méthodes ne font pas partie de la même classe, mais d'une classe Apple et d'un framework dont je me sert mais que je n'ai pas codé(méthode "close")... Je ne peux donc rien y faire, mais est-ce grave docteur ? Merci.
2) J'ai un
-[NSCFDictionary setObject:forKey:]: mutating method sent to immutable object
qui arrête une méthode (sans planter l'appli) mais... L'objet concerné est un NSMutableDictionary... Incompréhensible, je ne vous donne pas bcoup d'indices mais j'espère que vous reconnaitrez une erreur classique...Merci
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Mais c'est pâs bien grave et assez fréquent (genre pour les méthodes name, length etc...)
Je comprend que ça te gêne ces warnings qui risque d'en masquer d'autres plus graves.
Désactives donc l'option de warning correspondant aux méthodes identiques dans les options de build de ton compilateur.
Si le log te dis qu'il est pas mutable, c'est qu'il est pas mutable.
Il suffit pas de souhaiter qu'il le soit pour que ce soit vrai.
Si tu écris un truc du genre
Ben monDict n'est pas mutable, même si t'a pris la peine de déclarer ton pointeur comme pointant vers un mutable.
Attention aux méthodes portant le même nom (ou plutôt qui ont la même signature de sélecteur), ça peut poser problème pour des objets qui ne sont pas dans la même hiérarchie.
Ton MutableDictionnary a probablement été initialisé avec une méthode de NSDictionary.
Et c'est dans la partie "Code...." que je prend le message de tentative de modif d'un immutable.... :crackboom:-
Mais alors, es-tu bien sur que le message d'erreur concerne bien ton majdata ?
Ne précise pas qu'il s'agit de ton majdata, même si le contexte nous pousse naturellement à le penser.
Que fait-elle cette "partie code" ?
Ne tenterait-elle pas de modifier un autre NSDictionary ? qui par exemple serait un des élements contenu dans ton NSMutableDictionary ?
EDIT : Et j'ai vérifié, c'est là que j'ai le message :
Il y a toute une série derrière.
Ce qui est dingue c'est que je n'ai pas touché à cette partie du code de mon ancien projet, a seule différence : La version de XCode...
NB : En fait j'ai touché à une autre classe dont une instance est appelée un peu plus haut mais qui n'intervient pas avec majdata..
A moins que tu parles d'Alzheimer, sinon je ne vois pas... un écrasement mémoire permanent, à chaque fois ?
po [majdata class]
NSCFDictionary
Mon code
:why?:
Si c'est bon alors, si tu suis [majdata class] depuis la ligne d'initialisation jusqu'à la ligne qui génère l'erreur ça change quand ?
T'es en monoThread ?
La variable est toujours en non mutable incroyable !!!
Y'a rien de magique dans l'objC et Cocoa,
Il doit bien y avoir une explication simple.
Mais bon, à ce stade moi je ferais un "Clean all Target"
Et tant que tu y es, Quites XCode, éteints ton mac,
Coupes le disjoncteur de chez toi, coupes aussi le jus dans tout le quartier, débranches le cable,
Puis files vite acheter 10 non 100 bougies et batonets d'encens,
Allumes tout ça chez toi, mets un pagne, et danses en sautillant autour de ton mac en psalmodiant, en ObjC, des incantations à Cocoa.
Après tu te serts une soupe (avec 2 glaçons), tu croises les doigts, relances tout, recompiles et débug....
Tu penses bien j'ai commencé par ça avant de poster ici... ;D
Plus sérieusement je vais finir par copier-coller mon code.
Et ça a pas marché ?
Doit y avoir quelqu'un qui émet des "ondes négatives" ?
Essaies un truc du genre [belleMere Release] .... ? ::)
Sinon postes ton code en effet.
NSCFString !!!!!!!!!!!!!!!!!!!!!!!!!!!!
Je ne sais pas ce que signifie le "CF" mais si c'était mutable il le mettrait.. Pourquoi je n'ai plus de mutable mystère... Seul "explication" mais je ne vois pas par quelle magie cela poserait problème :
J'ai une autre classe dans mon projet où j'ai une méthode init créée par mes soins, je n'ai modifié des lignes que dans cette classe, mais je ne vois pas pourquoi ça gênerait, je le dis à tout hasard...
Core Fundation
Oui il mettrait NSCFMutableString
Un NSCFString n'est PAS mutable non plus
Serait-il possible que ton FundationFramework soit corrompu ?
Je laisse la place aux experts de haut vol sur ce coup :-\\
Program received signal: “EXC_BAD_ACCESSâ€.
.... :crackboom:-
Puis le run d'après j'en ai plus...
Ce sont des ClassClusters en fait, donc "po" ne fonctionnera pas.
Par contre, le EXC_BAD_ACCESS montre bien qu'il y a un gros mic-mac dans la mémoire.
Peut-être qu'en épiant ton appli avec Zombie, Instrument etc... tu trouverais des pistes ?
P.S. Tu serais pas en train de tester le futur génial extraordinaire et super-puissant MxCode de chez Microsoft ????
(un générateur de bug quoi !)
Si je mets cette ligne de code en commentaire, plus de bug immutable/mutable à la ligne :
Vous me direz il n'y a plus de clé "nom" dans mon dico, c'est vrai, mais néanmoins je pense que l'erreur devrait subsister clé ou pas clé avec l'utilisation d'un setValue ur un "sois-disant" immutable
Mais je n'ai pas modifié cette partie du code et ça fonctionnait avec l'ancienne version de XCode...
Info : est une variable d'instance.
clientsselect est rempli avec un initWithArray d'un NSMutableArray...
Bon belle découverte mais je n'avance pas d'un pouce dans la compréhension du problème...
Petit cachotier !
Tu nous avais pas dit que tu "redéfinissais" majdata.
Donc ce majdata ne pointe plus du tout vers le résultat de ton alloc-init que tu nous a fait lire !
Probablement que ton Array clientsSelect, contient lui des NSDictionary NON mutables !!
Je connaissais pas et j'en ai profitté pour explorer un peu les GDB Commands.
Sais pas encore trop si et quand ça me servira mais c'est instructif en tous cas
Si tu réassigne "majdata" avec un autre truc derrière, pour un peu que tu fasses un "release" dessus derrière, ça pète facilement oui.
Tu devrais passer un coup de " clang " dessus.
http://www.clanggui.eliotis.com/
Le Clientsselect est un array initwitharray d'un autre tableau mutable, qui contient des valeurs de la base, extraites via une méthode d'une autre classe modifiée avec le nouveau framework (on y est) qui a une méthode qui sort tout seul le contenu de la base en dico...
pfff.. et le dico m'étonnerais pas qu'il soit pas mutable, je verrais demain si c'est ça... On va voir mais encore merci
Par exemple:
Je peux ainsi manipuler les données contenues dans 'monDico'