2010-11-08 5 views
0

Hey everbody. Comment puis-je gérer une erreur avec le TBXML? Je veux dire, si je ne trouve pas le fichier, ou quoi d'autre. En fait, mon application tombe en panne quand j'éteins le serveur où se trouve le fichier.TBXML - Traitement des erreurs

Alors, comment puis-je gérer cela?

- (void)viewDidLoad { 

    TBXML * tbxml = [[TBXML tbxmlWithURL:[NSURL URLWithString:@"http://localhost/dev/mcomm/produto.xml"]] retain]; 
    TBXMLElement * rootXMLElement = tbxml.rootXMLElement; 



} 

Merci!

Répondre

2

Si l'erreur venue de la ligne où vous instancier tbxml vous pouvez essayer de l'envelopper dans un @try/@catch bloc:

TBXML *tbxml = nil; 
@try { 
    tbxml = [[TBXML tbxmlWithURL:[NSURL URLWithString:@"http://localhost/dev/mcomm/produto.xml"]] retain];; 
} 
@catch (NSException *exception) { 
    NSLog(@"Caught %@: %@", [exception name], [exception reason]); 
} 

Vous pouvez également télécharger les données XML en utilisant séparément NSURLConnection et utiliser les méthodes de délégué NSURLConnection pour gérer les conditions d'erreur . En cas de succès, transmettez les données résultantes à un constructeur tel que tbxmlWithXMLData:.

EDIT: vous avez fait remarquer que la ligne est la cause du problème:

TBXMLElement * xmlElement = aParentXMLElement->firstChild; 

L'erreur que vous obtenez est parce que vous essayez de déréférencer un pointeur NULL (aParentXMLElement est nul, et appelant ->someMethod il le déréférence). Donc, tout ce dont vous avez besoin est une clause de garde pour vérifier que aParentXMLElement est non nul avant d'essayer de le déréférencer. Quelque chose comme ça:

if (aParentXMLElement != nil) { 
    TBXMLElement * xmlElement = aParentXMLElement->firstChild; 
} else { 
    NSLog(@"Can't proceed: aParentXMLElement is nil"); 
} 
+0

Hey, j'ai essayé l'essayer et attraper, mais sans chance. Et la console ne donne rien. –

+0

Et c'est cette ligne qui cause l'erreur? Et pas, par exemple, en appelant '.rootXMLElement' sur' tbxml' quand il n'en a pas? –

+0

Je débogue, et le débogueur me montre cette ligne: TBXMLElement * xmlElement = aParentXMLElement-> firstChild; –

Questions connexes