NSMutablearray неожиданное поведение: все объекты, равные последнему добавленному объекту - PullRequest
0 голосов
/ 13 июля 2011

Я испытываю непредвиденное поведение при добавлении объектов в NSMutablearray.По сути, я хочу добавить объект в конец массива.Все объекты в массиве должны быть разными.Но я вижу, что все объекты в массиве равны последнему, который был вставлен.Я включил соответствующий код:

   _trafficArray = [[NSMutableArray alloc] init];


    int _index = -1;
    int _currentIndex = 0;
    int _reportCount = 0;

TrafficReport *_report = [[TrafficReport alloc] init];


    while (true) {

        if (!xmlTextReaderRead(_reader)) break;

        switch (xmlTextReaderNodeType(_reader)) {     

            case XML_READER_TYPE_ELEMENT:


                temp = (char *)xmlTextReaderConstName(_reader);

                currentTagName = [NSString  stringWithCString:temp encoding: NSUTF8StringEncoding];

                if([currentTagName isEqualToString:@"Title"])
                {

                    _index++;

                    temp = (char *)xmlTextReaderConstName(_reader);

                    currentTagName = [NSString  stringWithCString:temp encoding: NSUTF8StringEncoding];


                    xmlTextReaderRead(_reader);

                    temp = (char*)xmlTextReaderConstValue(_reader);
                    currentTagValue = [NSString stringWithCString:temp 
                                                         encoding:NSUTF8StringEncoding];


                    _report.title = currentTagValue;

                    _reportCount++;


                }
                if ([currentTagName isEqualToString:@"Description"]) {

                    temp = (char *)xmlTextReaderConstName(_reader);

                    currentTagName = [NSString  stringWithCString:temp encoding: NSUTF8StringEncoding];

                    xmlTextReaderRead(_reader);

                    temp = (char*)xmlTextReaderConstValue(_reader);
                    currentTagValue = [NSString stringWithCString:temp 
                                                         encoding:NSUTF8StringEncoding];

                    _report.description = currentTagValue;
                    _reportCount++;


                }

            if (_reportCount==2) {


                _reportCount = 0;

                NSLog(@"updated! with index = %d and title = %@\n\n", _index, _report.title);



                [_trafficArray insertObject:_report atIndex:_index];

                [_report release];

    TrafficReport *_report = [[TrafficReport alloc] init];


            }


            continue;

        default:continue;
    }


}

1 Ответ

2 голосов
/ 13 июля 2011

Это вопрос объема.После выпуска _report вы объявляете новый объект _report в области действия оператора if.Несмотря на то, что оно имеет то же имя, которое вы объявили перед циклом while, оно ссылается на другую переменную.Удалите объявление (TrafficReport *) перед присвоением, чтобы вместо него присвоить новое значение существующей переменной _report.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...