Crash avec problème de NSNumber

apocaalypsoapocaalypso Membre
21:04 modifié dans API UIKit #1
Bonjour,

J'ai un problème qui cause un crash sans donner d'erreur précise dans la console. Il m'indique la ligne et la méthode concernée dans le debugger mais j'ai un peu de mal avec.

Voici les lignes qui me pose problème :
NSNumber *newFleets = [self displayFleetsOfPlanet:whatPlanetToAttack];<br />				NSNumber *fleetsMovingNb = [NSNumber numberWithInteger:1];<br />				NSLog(@&quot;newFleets = %d, fleetsMovingNb = %d&quot;, [newFleets integerValue], [fleetsMovingNb integerValue]);<br />				if([newFleets integerValue]-[fleetsMovingNb integerValue] == 0)<br />				{<br />					[self changeUserOfPlanet:whatPlanetToAttack withUser:[NSNumber numberWithInteger:0]];<br />				}<br />


Voici la méthode présente dans les lignes ci-dessus :
-(NSNumber *)displayFleetsOfPlanet:(UIImageView *)planet<br />{<br />	// We get the index of the planet in the array and we get the value in the second array at this same index<br />	NSInteger indexOfPlanet = [cases indexOfObject:planet];<br />	NSNumber *numberOfFleets = [fleetsByPlanets objectAtIndex:indexOfPlanet];<br />	NSLog(@&quot;&#092;t number of fleets %d of planet at index %d&quot;, [numberOfFleets integerValue], indexOfPlanet);<br />	<br />	return numberOfFleets;<br />}


et voici mes arrays :
cases = [[NSArray alloc] initWithObjects:case1,case2, ... où les cases sont des UIImageView<br />fleetsByPlanets = [[NSMutableArray alloc] initWithObjects:[NSNumber numberWithInteger:0],[NSNumber numberWithInteger:0],...<br />


J'ai posté une image du debugger, j'ai vu du rouge alors je me suis dit que ça n'était pas bon bon...
Je ne vois pas pourquoi mon application crash, quelqu'un aurait une solution ou une piste ?

Merci !

Réponses

  • muqaddarmuqaddar Administrateur
    21:04 modifié #2
    J'ai rien vu qui me choque, mais t'as essayé de mettre un markeur par ligne pour voir exactement où ça plante dans le debugger ? Et si besoin rentre dans la méthode... en faisant de même. C'est comme ça que je fais quand tout me paraà®t bon.
  • apocaalypsoapocaalypso Membre
    21:04 modifié #3
    J'ai jamais fait ça.
    Peux-tu me dire en gros comment faire ?
    C'est les breakpoints ?
  • apocaalypsoapocaalypso Membre
    21:04 modifié #4
    J'ai également cette erreur quelques fois :
    2009-05-30 15:57:41.974 App[2604:20b] *** -[UICGColor integerValue]: unrecognized selector sent to instance 0x5e10300
    2009-05-30 15:57:41.976 App[2604:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UICGColor integerValue]: unrecognized selector sent to instance 0x5e10300'


    Le debugger m'indique l'erreur ici :
    if([newFleets integerValue]-[fleetsMovingNb integerValue] == 0)
    

  • muqaddarmuqaddar Administrateur
    21:04 modifié #5
    dans 1243691409:

    J'ai jamais fait ça.
    Peux-tu me dire en gros comment faire ?
    C'est les breakpoints ?


    Oui mets des breakpoints (en cliquant à  gauche des nombre de lignes dans xCode) et lance un build and debug, ensuite tu te sers des icones pour avancer dans le code entre les breakpoints.
  • muqaddarmuqaddar Administrateur
    21:04 modifié #6
    dans 1243692068:

    J'ai également cette erreur quelques fois :
    2009-05-30 15:57:41.974 App[2604:20b] *** -[UICGColor integerValue]: unrecognized selector sent to instance 0x5e10300
    2009-05-30 15:57:41.976 App[2604:20b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UICGColor integerValue]: unrecognized selector sent to instance 0x5e10300'


    Le debugger m'indique l'erreur ici :
    if([newFleets integerValue]-[fleetsMovingNb integerValue] == 0)
    




    Regarde ce que te retourne [fleetsByPlanets objectAtIndex:indexOfPlanet];
  • laudemalaudema Membre
    21:04 modifié #7
    dans 1243691409:

    J'ai jamais fait ça.
    Peux-tu me dire en gros comment faire ?
    C'est les breakpoints ?


    Salut apocaalypso

    file:///Developer/Documentation/DocSets/com.apple.ADC_Reference_Library.DeveloperTools.docset/Contents/Resources/Documents/documentation/DeveloperTools/Conceptual/XcodeDebugging/300-Debugging_in_the_Debugger/chapter_6_section_3.html#//apple_ref/doc/uid/TP40007057-CH6-BABGJCIF

    Est un lien qui te montrera pourquoi une ligne en rouge dans le debugger n'a rien d'alarmant. De là  tu pourras explorer un peu plus les possibilités de Xcode dans ces situations.

    Sinon "-[UICGColor integerValue]: unrecognized selector sent to instance 0x5e10300" veut dire que le selecteur integerValue demandé à  l'instance 0x5e10300 de UICGColor n'existe pas.

    hth

  • AliGatorAliGator Membre, Modérateur
    21:04 modifié #8
    Ca veut surtout dire qu'il essaye en effet d'envoyer le message "integerValue" à  un objet... qui pour lui est un UICGColor... alors qu'à  mon avis, que ce soit newFleets ou fleetsMovingNb, les 2 objets à  qui tu envoies cette méthode donc, ni l'un ni l'autre ne sont, d'après toi, j'imagine, des UIColors...

    Ceci présage donc d'un écrasement mémoire, c'est à  dire que tu as relâché (releasé) trop tôt, ou oublié un retain, sur un de ces 2 objets. Du coup à  un moment donné ils se sont retrouvés avec un retainCount de zéro, se sont détruits se disant que personne ne les utilisait plus... et là  tu essayes d'y réaccéder alors qu'ils n'existent plus, donc il va lire dans la mémoire à  une adresse mémoire dont le contenu a été supprimé entre temps, et va y trouver un peu n'importe quoi... en tout cas pas ce que tu attends.

    Vérifie le bon balancement de tes retain/release et ta bonne gestion de la mémoire. passe un coup de ClangGUI à  la limite il peut t'indiquer des trucs qui pourraient t'aider.
  • laudemalaudema Membre
    mai 2009 modifié #9
    dans 1243728613:

    relâché (releasé) trop tôt, ou oublié un retain, sur un de ces 2 objets. Du coup à  un moment donné ils se sont retrouvés avec un retainCount de zéro, se sont détruits se disant que personne ne les utilisait plus...


    Parfois j'ai ce type de message "unrecognized selector" pour des liaisons ...
    Le selecteur ou la propriété sont bien là , en fait c'est l'objet qui n'y est plus !

    Merci Ali, tu viens de m'ouvrir les yeux.
  • apocaalypsoapocaalypso Membre
    21:04 modifié #10
    Effectivement sur l'objet newFleets j'ai un retainCount de 93... Je ne sais absolument pas par où j'ai pu en arriver là . Je vais regarder plus précisément.
Connectez-vous ou Inscrivez-vous pour répondre.