Problème NSXMLParser

bonjour, je reviens vers vous concernant mon problème.


J'aimerai récupérer la valeur de ce qui se trouve entre les balises <Estado>1</Estado> :



2015-03-15 20:57:59.841 agriduino[763:289187] <?xml version="1.0" encoding="utf-8"?>

<estadoDomotica>

<Pin><Nombre>Pin 2</Nombre><Estado>0</Estado></Pin><Pin><Nombre>Pin 3</Nombre><Estado>0</Estado></Pin><Pin><Nombre>Pin 4</Nombre><Estado>0</Estado></Pin><Pin><Nombre>Pin 5</Nombre><Estado>0</Estado></Pin><Pin><Nombre>Pin 6</Nombre><Estado>0</Estado></Pin><Pin><Nombre>Pin 7</Nombre><Estado>0</Estado></Pin><Pin><Nombre>Pin 8</Nombre><Estado>0</Estado></Pin><Pin><Nombre>Pin 9</Nombre><Estado>0</Estado></Pin><Pin><Nombre>Analog 0</Nombre><Estado>200</Estado></Pin><Pin><Nombre>Analog 1</Nombre><Estado>213</Estado></Pin><Pin><Nombre>Analog 2</Nombre><Estado>184</Estado></Pin><Pin><Nombre>Analog 3</Nombre><Estado>184</Estado></Pin><Pin><Nombre>Analog 4</Nombre><Estado>217</Estado></Pin><Pin><Nombre>Analog 5</Nombre><Estado>127</Estado></Pin></estadoDomotica>


Mon passer fonctionne jusqu'à  mon message d'erreur.


Voici ce que j'ai fait :


 


Ma classe état : état.m



#import <Foundation/Foundation.h>

@interface etat : NSObject {


NSString * Pin;
NSString * Nombre;
NSString * Estado;

}

@property (nonatomic, retain) NSString *Pin;
@property (nonatomic, retain) NSString *Nombre;
@property (nonatomic, retain) NSString *Estado;




@end


Ma classe XMLEtatParser :XMLEtatParser.m



#import "XMLEtatParser.h"

@implementation XMLEtatParser


- (NSArray *)items
{
return items;
}

- (id)parseXMLAtURL:(NSURL *)url
toObject:(NSString *)aClassName
parseError:(NSError **)error
{

items = [[NSMutableArray alloc] init];
className = aClassName;
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser parse];

if([parser parserError] && error) {
*error = [parser parserError];
}

return self;
}

- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
NSLog(@Ouvre balise: %@", elementName);
if([elementName isEqualToString:className]) {
// create an instance of a class on run-time
item = [[NSClassFromString(className) alloc] init];
}
else {
currentNodeName = [elementName copy];
currentNodeContent = [[NSMutableString alloc] init];
}
}

- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
{
NSLog(@Ferme balise: %@", elementName);
if([elementName isEqualToString:className]) {
[items addObject:item];


}
else if([elementName isEqualToString:currentNodeName]) {
// use key-value coding
[item setValue:currentNodeContent forKey:elementName];


currentNodeContent = nil;


currentNodeName = nil;
}
}

- (void)parser:(NSXMLParser *)parser
foundCharacters:(NSString *)string
{
[currentNodeContent appendString:string];
}

@end


mon ViewControlleur.m



#import "ViewController.h"
#import "XMLEtatParser.h"
#import "etat.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize contenue;

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

- (IBAction)parse:(id)sender {


NSString *myURLString =[NSString stringWithFormat:@http:;//%@", contenue.text];
NSURL *url =[NSURL URLWithString:myURLString];

XMLEtatParser *myParser = [[XMLEtatParser alloc]
parseXMLAtURL:url toObject:@Nombre parseError:nil];

for(int i = 0; i < [[myParser items] count]; i++) {
NSLog(@Nombre: %@", [( etat *)[[myParser items] objectAtIndex:i] Nombre]);
}


}




@end


et voici ce que la console me renvoie :



2015-03-28 12:35:19.488 xmltest[4454:1925383] Ouvre balise: estadoDomotica
2015-03-28 12:35:19.490 xmltest[4454:1925383] Ouvre balise: Pin
2015-03-28 12:35:19.490 xmltest[4454:1925383] Ouvre balise: Nombre
2015-03-28 12:35:19.490 xmltest[4454:1925383] Ferme balise: Nombre
2015-03-28 12:35:19.493 xmltest[4454:1925383] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'
*** First throw call stack:
(0x18365e530 0x1946340e4 0x1835473e0 0x1000f21b0 0x1845621dc 0x194ae0f50 0x194adce84 0x194adbac4 0x18455f188 0x18455f424 0x18455f5f4 0x1000f1d00 0x1000f15b8 0x187ea0a14 0x187e89d08 0x187ea03b0 0x187ea003c 0x187e99590 0x187e6ce60 0x18810c46c 0x187e6b3d0 0x183616d34 0x183615fd8 0x183614088 0x1835411f4 0x18c9636fc 0x187ed210c 0x1000f1b3c 0x194cb2a08)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)

Il devait m'afficher dans la console ce qui se trouve dans la balise Nombre ( 0 ou 1)


Je ne comprend pas trop, pouvez vous me donner un petit coup de main


Merci :'(


Réponses

Cette discussion a été fermée.