Массив перезаписывается при разборе XML (Objective-C) - PullRequest
0 голосов
/ 05 июля 2011

Я использую анализатор TBXML, но у меня возникают некоторые трудности.

Я использую следующий код для добавления данных из объекта продукта в MutableArray с именем laarzen.

- (void)loadURL {
    // Load and parse an xml string
    Products *product = [[Products alloc] init];
    tbxml = [[TBXML alloc] initWithURL:[NSURL URLWithString:@"url..."]];

    // If TBXML found a root node, process element and iterate all children

    // Obtain root element
    TBXMLElement * root = tbxml.rootXMLElement;

    // if root element is valid
    if (root) {
        // search for the first category element within the root element's children

        TBXMLElement * Category = [TBXML childElementNamed:@"Category" parentElement:root];
        Products *product = [[Products alloc] init];
        // if an author element was found
        while (Category!= nil) {

            // instantiate an author object


            // get the name attribute from the author element
            product.category = [TBXML valueOfAttributeNamed:@"DisplayName" forElement:Category];

            // search the author's child elements for a book element
            TBXMLElement *xmlProduct = [TBXML childElementNamed:@"Product" parentElement:Category];
            int i;
            i=0;
            // if a book element was found
            while (xmlProduct != nil) {
    // extract the title attribute from the book element
                    product.productId = [TBXML valueOfAttributeNamed:@"Id" forElement:xmlProduct];

                    // extract the title attribute from the book element
                    NSString * price = [TBXML valueOfAttributeNamed:@"Price" forElement:xmlProduct];

                    // if we found a price
                    if (price != nil) {
                        // obtain the price from the book element
                        product.price = [NSNumber numberWithFloat:[price floatValue]];
                    }



                    // add the book object to the author's books array and release the resource
                    [laarzen addObject:product];

// find the next sibling element named "book"
                xmlProduct = [TBXML nextSiblingNamed:@"Product" searchFromElement:xmlProduct];
            }

            // add our author object to the authors array and release the resource


            // find the next sibling element named "author"
            Category = [TBXML nextSiblingNamed:@"Category" searchFromElement:Category];
        }

    }


    // release resources
    [tbxml release];
    [product release];
}

Для некоторыхПричина, по которой последний узел, проанализированный в xml, перезаписывает все записи в массиве.то есть, если последняя цена равна 39,99, то все цены в массиве будут 39,99.

В моей области просмотра я распределяю laarzen следующим образом:

laarzen = [[NSMutableArray alloc] init];

В моей сделке яЯ выпускаю его снова.

В заголовочном файле я сделал следующее:

NSMutableArray *laarzen;
@property (nonatomic, retain) NSMutableArray *laarzen;

Возможно, это будет проблема с памятью, но я просто не вижу ее.

Thnx!

Ответы [ 2 ]

5 голосов
/ 05 июля 2011

Если вы не создаете новый объект продукта каждый раз, вы просто сохраняете большое количество ссылок на один и тот же объект продукта в своем массиве - следовательно, цена кажется одинаковой, поскольку все они являются одним и тем же продуктом.

1 голос
/ 05 июля 2011

Я не вижу, где вы создаете новый продукт для каждого элемента, похоже, у вас есть только один экземпляр продукта, и в итоге вы просто продолжаете обновлять один и тот же снова и снова.

...