iphone - Why are my arrays showing up as empty, even after I've added values to them? -


i parsing xml nsxmlparser , have nsmutablearrays (instance variables) in app. when parse xml file, build objects values of xml elements, , set array objects.

in moment set array objects can see values of them. once have finished parsing xml want retrieve values , array empty.

here part of code:

//sthelpviewcontroller.h  #import <uikit/uikit.h>  @class softokeniphoneappdelegate, faq; @interface sthelpviewcontroller : uiviewcontroller {     uiview *viewanswer;     uinavigationbar *answertitle;     uibutton *answerdescription;     nsarray *answersarray;     nsmutablearray *faqs;     //this array problem     nsmutablestring *currentelementvalue;        faq *afaq;      nsstring* answer1;     nsstring* answer2;     nsstring* answer3;     nsstring* answer4; }  @property (nonatomic, retain) iboutlet  uiview *viewanswer; @property (nonatomic, retain) iboutlet  uinavigationbar *answertitle; @property (nonatomic, retain) iboutlet  uibutton *answerdescription; @property (nonatomic, retain) nsmutablearray *faqs;  @property (nonatomic, retain)nsstring* answer1;  @property (nonatomic, retain)nsstring* answer2;  @property (nonatomic, retain)nsstring* answer3;  @property (nonatomic, retain)nsstring* answer4;    @end      //sthelpviewcontroller.m   - (void)viewdidload {     [super viewdidload];     nsurl *url = [[nsurl alloc] initwithstring:@"http://clientes.imit.cl/movilpass/faq.xml"];     nsxmlparser *xmlparser = [[nsxmlparser alloc] initwithcontentsofurl:url];      //initialize delegate.     sthelpviewcontroller *parser = [[sthelpviewcontroller alloc] initxmlparser];      //set delegate     [xmlparser setdelegate:parser];      //start parsing xml file.     bool success = [xmlparser parse];      if(success){         nslog(@"f.a.q. loaded xml file");          //here problem. @ part xcode says faqs(my array) empty          answer1 = [[[faqs objectatindex:0] valueforkey:@"respuesta"]description];         answer2 = [[[faqs objectatindex:1] valueforkey:@"respuesta"]description];         answer3 = [[[faqs objectatindex:2] valueforkey:@"respuesta"]description];         answer4 = [[[faqs objectatindex:3] valueforkey:@"respuesta"]description];         answersarray = [[nsarray alloc] initwithobjects:answer1,answer2,answer3,answer4,nil];     }     else     {         nslog(@"error loading xml file f.a.q. default data loaded instead.");         answersarray = [[nsarray alloc]                          initwithobjects:@"el movilpass es una nueva herramienta de bci móvil que le permitirá obtener la clave de  ocho dígitos desde su celular, sin tener que llevar el dispositivo electrónico. regístrese para recibir la aplicación, cárguela en su iphone y sincronícela.",                          @"el movilpass es igual de válido que el dispositivo electrónico.  sólo debe sincronizarlo correctamente en su celular, siguiendo uno uno los pasos que le indiquen.",                         @"para sincronizar, presione el botón “ajustes”, luego “sincronizar” y obtendrá los siguientes pasos:\n \n ingrese su banca internet. \n entre seguridad y emergencia. \n click en movilpass. \n seleccione el botón 'sincronizar'.",                         @"si se le perdió su telefono, lo primero que debe hacer es llamar al 600 8242424 para que lo bloqueen. una vez que obtenga el nuevo aparato, podrá solicitar nuevamente su movilpass.",                          nil];        }                                    }   - (sthelpviewcontroller *) initxmlparser {      [super init];      //appdelegate = (softokeniphoneappdelegate *)[[uiapplication sharedapplication] delegate];      return self; }  - (void)parser:(nsxmlparser *)parser didstartelement:(nsstring *)elementname   namespaceuri:(nsstring *)namespaceuri qualifiedname:(nsstring *)qualifiedname     attributes:(nsdictionary *)attributedict {     if([elementname isequaltostring:@"preguntasfrecuentes"]) {         faqs = [[nsmutablearray new]retain];             }     else if([elementname isequaltostring:@"item"])      {         afaq = [[faq alloc] init];         afaq.itemid = [[attributedict objectforkey:@"id"] integervalue];                 nslog(@"leyendo valor de atributo id: %i", afaq.itemid);     }     nslog(@"procesando elemento: %@", elementname); }  - (void)parser:(nsxmlparser *)parser foundcharacters:(nsstring *)string {      if(!currentelementvalue)         currentelementvalue = [[nsmutablestring alloc] initwithstring:string];     else         [currentelementvalue appendstring:string];      nslog(@"procesando valor: %@", currentelementvalue);  }  - (void)parser:(nsxmlparser *)parser didendelement:(nsstring *)elementname   namespaceuri:(nsstring *)namespaceuri qualifiedname:(nsstring *)qname {      if([elementname isequaltostring:@"preguntasfrecuentes"])         return;     if([elementname isequaltostring:@"item"]) {         [faqs addobject:afaq];         [afaq release];         afaq = nil;      }     else     {         [afaq setvalue:currentelementvalue forkey:elementname];          }     [currentelementvalue release];     currentelementvalue = nil;      //if print array here, can see values } 

what doing wrong?

you instantiate faqs = [[nsmutablearray new]retain]; on every didstartelement call. seems weird me. should move faqs = [[nsmutablearray new]retain]; viewdidload.

moreover, don't see necessity of retain there.


Comments

Popular posts from this blog

javascript - Enclosure Memory Copies -

php - Replacing tags in braces, even nested tags, with regex -