2010-08-02 15 views
6

He estado buscando durante aproximadamente dos horas tratando de averiguar qué es este error y cómo resolverlo. documentos de Apple con gusto diceAyuda para resolver el error 39 de NSXMLParser: NSXMLParserAttributeNotStartedError

NSXMLParserAttributeNotStartedError Atributo no se ha iniciado. Disponible en Mac OS X v10.3 y posterior. Declarado en NSXMLParser.h.

pero no proporciona ninguna ayuda de ningún tipo. ¿Puede alguien ayudarme aquí? Cualquier empujón en la dirección correcta es muy apreciado.

En viewDidLoad, que tienen:

NSURL *xmlUrl = [NSURL fileURLWithPath:xmlFilepath]; 
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:xmlUrl]; 
[xmlParser setDelegate:self]; 
[xmlParser setShouldResolveExternalEntities:NO]; 
BOOL success = [xmlParser parse]; 

No hay problemas para obtener el código XML, que pueden leer con éxito hasta el elemento raíz, entonces se rompe.

El resto del código relacionado dice así:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { 
if([elementName isEqualToString:@"foo"]) { 
    foo = [[NSMutableArray alloc] init]; 
} else if([elementName isEqualToString:@"bar"]) { 
    bar = [[Bar alloc] init]; 
} 
} 

- (void)parser:(NSXMLParser *)parser foundAttributeDeclarationWithName:(NSString *)attributeName forElement:(NSString *)elementName type:(NSString *)type defaultValue:(NSString *)defaultValue { 
    if ([elementName isEqualToString:@"bar"]) { 
    if ([attributeName isEqualToString:@"barAttrib1"]) { 
    [bar setBarAttrib1:[defaultValue intValue]]; 
    } else if ([attributeName isEqualToString:@"barAttrib2"]) { 
    [bar setBarAttrib2:defaultValue]; 
    } 
} 
} 

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { 
// nothing inside the elements, just attributes 
} 

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { 
if ([elementName isEqualToString:@"bar"]) { 
    [foo addObject:bar]; 
    [bar release]; 
    bar = nil; 
} 
} 

Gracias de antemano.

EDIT: xml de ejemplo

<foo> 
    <bar barAttrib1=1 barAttrib2="hello" /> 
    <bar barAttrib1=2 barAttrib2="world" /> 
</foo> 
+0

Por favor, puesto el ejemplo XML demasiado – Yuji

+0

Yuji, por favor ver post actualizado. ¡Gracias! – Altealice

+2

+1 por hacer una muy buena pregunta. – Sid

Respuesta

6

Si esto es XML, a continuación, las citas son REQUERIDO todo el valor del atributo. Trate

<foo> 
    <bar barAttrib1="1" barAttrib2="hello" /> 
    <bar barAttrib1="2" barAttrib2="world" /> 
</foo> 

Nota las comillas alrededor de los valores de barAttrib1

+0

arr ... Pero por supuesto. >. < Debo estar demasiado estresado como para pasar por alto eso. Lo intentaré una vez que regrese a la oficina mañana. ¡Gracias! – Altealice

+0

Sí, eso fue todo. Gracias Jim! – Altealice

Cuestiones relacionadas