Vous n'êtes pas identifié.
J4ai honte des tutos que l'on faisait au début...
l'init est mauvais, il faut celui là
- (id)parseXMLAtURL:(NSURL *)url
toObject:(NSString *)aClassName
parseError:(NSError **)error
{
if (self = [super init])
{
[items release];
items = [[NSMutableArray alloc] init];
className = aClassName;
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser parse];
if([parser parserError] && error) {
*error = [parser parserError];
}
[parser release];
}
return self;
}+
Hors ligne
Merci beaucoup de ton aide, je ne pense pas que j'aurais pensé à ça.
Par contre ma seconde erreur persiste, celle ci :

Une idée ?
MAJ :
Voici le code de mon parser :

Je ne comprends vraiment pas ce qui plante 
Dernière modification par Dvins (20-07-2010 17:50:30)
Hors ligne
Tu veux pas essayer de release à la main url après avoir fini ton parsage ?
Au fait, sélectionne ton code, puis clic droit puis re indent selection
+
Hors ligne
Si j'essaye de releaser "url", ça plante (sans message dans la console) !
J'avoue que je suis assez perdu là...
(le code est bien indenté)
Hors ligne
Euh oui, mais tu as bien enlever l'autorelease juste avant ??
Pour l'indentation du code, tu as des marges de taré !
Hors ligne
Bon bin merci beaucoup, c'est l'url qui foirait.
Par contre, j'aimerais essayer de comprendre (oui j'ai relu la fiche mémoire plusieurs fois mais tu as le droit de me dire de la lire une fois de plus au besoin
) : pourquoi l'autorelease n'était pas intelligent dans ce cas là ?
(pour les marges, c'est parce que j'ai fait un screenshot de Instruments qui n'était pas en plein écran !)
Hors ligne
Ah et non, en fait ça me laisse la leak au même endroit 
D'autres idées ?
Hors ligne
1/ relis la fiche mémoire
2/ relis la fiche mémoire
3/ relis la fiche mémoire
4/ relis la fiche mémoire
Nan je rigole c'est pas forcément dit. Le problème de l'autorelease, c'est que tu places ton objet dans un bassin. A un instant t, quant ton processus a plus rien à faire, tac il libère. Donc là, c'est très surement un concours de circonstances où ton objet est libéré avant ou pendant le parsage donc ça merde.
Règle d'or : L'autorelease tu n'utiliseras que quand vraiment besoin tu auras...
Quand tu peux, évites l'autorelease, au moins tu sais ce que tu fais. C'est plus contraignant, mais tellement plus clair 
+
EDIT : ah merde. Pas de chance. Bon, dans leaks, quand tu as la pile des méthodes, tu en as a toi à un moment sur la fuite (avec une icône de tête de bonhomme ?)
Hors ligne
Pour plus de clarté, voici mon code actuel :
ViewController.m
NSString *monUrl=[NSString stringWithFormat:@"http://www.monurlamoi.com/data.xml"];
NSURL *url=[[NSURL alloc] initWithString:monUrl];
myParser = [[XMLToObjectParser alloc] parseXMLAtURL:url toObject:@"NouveauMembre" parseError:nil];
[url release];XMLToObjectParser.m
- (id)parseXMLAtURL:(NSURL *)url
toObject:(NSString *)aClassName
parseError:(NSError **)error
{
if (self = [super init]) {
[items release];
items = [[NSMutableArray alloc] init];
className = aClassName;
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser parse];
[className release];
[currentNodeName release];
[currentNodeContent release];
[item release];
if([parser parserError] && error) {
*error = [parser parserError];
}
[parser release];
}
return self;
}Photo de la leak :
VOIR PLUS HAUT 
EDIT : Oui j'en ai une sur la fonction dans le screenshot + haut...
Merci d'avance pour votre aide dans mon apprentissage 
Dernière modification par Dvins (20-07-2010 20:01:22)
Hors ligne
bon stringWithFormat est inutile au passage
myParser, il est release quelque part ?
EDIT
nan je parle pas de ça. Quand tu as la pile des méthodes appelées pour retrouver la fuite, tu as des icônes à côté...
Hors ligne
Oui, myParser est déclaré dans le .h, puis @property, puis @synthetize, puis release dans le dealloc !
Hors ligne
Voilà ce que j'ai :

Quand je clique sur la plus haute, ça envoie sur le screenshot que j'ai fait plus haut.
Oui je l'appelle seulement une fois ! (sauf si je clique sur "refresh", mais j'en suis pas encore là)
Hors ligne
Pfou bizarre ton truc. Bon écoute, je laisse passer la nuit dessus car je sèche
+
Hors ligne
Bah merci d'avoir essayé ^^
(j'espère que je vais réussir à trouver ou que quelqu'un pourra m'aiguiller
)
Hors ligne
Tu peux essayer
NSString *monUrl=[[NSString alloc] initWithString:@"http://www.monurlamoi.com/data.xml"]; NSURL *url=[[NSURL alloc] initWithString:monUrl]; myParser = [[XMLToObjectParser alloc] parseXMLAtURL:url toObject:@"NouveauMembre" parseError:nil]; [url release]; [monURL release];
Hors ligne
Toujours pareil 
Je ne vois pas mon erreur... As-tu besoin de plus de code pour une vision plus globale ?
Hors ligne
Est-ce qu'à votre avis, ça nécessite un AutoreleasePool ?
Si oui, l'implémentation doit se faire à quel niveau selon vous ?
Hors ligne
@DricABrac : ouais c'est ce que je lis sur le net mais bon moi je suis un peu perfectionniste sur les bords et surtout, j'apprends.
Et quand j'apprends, ça me frustre d'avoir un truc où je dois me dire "ça je comprendrais pas", j'aime bien essayer de fouiller un peu les choses !
Mais bon là j'avoue que je pige rien 
Hors ligne
a quand un parser sans fuite Ipo ?!!
Hors ligne
J'ai eu le même problème que toi, voici la solution
> http://stackoverflow.com/questions/2298 … arser-code
Hors ligne
Copyright © 2009 - ipup.fr • création de Jérémy Lagrue • design de Loann Fraillon • contact