NSMutableArray не добавляет все элементы, только последний - Iphone / IOS / xcode - PullRequest
0 голосов
/ 07 ноября 2011

Я загружаю значки из XML-файла в NSMutableArray, используя следующее:

NSArray *iconItems = [doc nodesForXPath:kName_icon error:nil];//Root node
    for (CXMLElement *iconItem in iconItems)
    {

        NSArray *iconTempArray = [iconItem elementsForName:kName_url];
        for(CXMLElement *urlTemp in iconTempArray) 
        {
            arryTableAllIcons = [[NSMutableArray alloc] init];
            [arryTableAllIcons addObject:[NSString stringWithFormat:@"%@", urlTemp.stringValue]];

            NSLog(@"Icon Found %@",urlTemp.stringValue);

       break;
        }

Я пытаюсь отобразить это в своей таблице следующим образом: (это в -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath)

cell.textLabel.text = [arryTableAllIcons objectAtIndex:indexPath.row];

Кажется, что счет работает, поскольку у меня правильное количество ячеек, но в таблице пустые ячейки и 1 с последним найденным значком текста в

The count is just:  `return [arryTableAllIcons count];`

Имой NSLog возвращает правильный текст

2011-11-07 10:30:23.692 Del Search[2791:f203] Icon Found guideDogs_off.png
2011-11-07 10:30:23.692 Del Search[2791:f203] Icon Found WheelchairAssist_off.png
2011-11-07 10:30:23.739 Del Search[2791:f203] Icon Found walk_off.png
2011-11-07 10:30:23.740 Del Search[2791:f203] Icon Found DisabledWc_off.png
2011-11-07 10:30:23.741 Del Search[2791:f203] Icon Found hearingaid_off.png
2011-11-07 10:30:23.741 Del Search[2791:f203] Icon Found loop_off.png
2011-11-07 10:30:23.742 Del Search[2791:f203] Icon Found carpark_off.png
2011-11-07 10:30:23.742 Del Search[2791:f203] Icon Found dropcounter_off.png
2011-11-07 10:30:23.743 Del Search[2791:f203] Icon Found staff_off.png
2011-11-07 10:30:23.743 Del Search[2791:f203] Icon Found Buggy_off.png

Так что я просто должен неправильно добавить массив!

This is what's returned

Любая помощь будет очень признательна

Ответы [ 3 ]

3 голосов
/ 07 ноября 2011

Вы постоянно создаете новые, пустые NSMutableArrays

    for(CXMLElement *urlTemp in iconTempArray) 
    {
        arryTableAllIcons = [[NSMutableArray alloc] init];
        [arryTableAllIcons addObject:[NSString stringWithFormat:@"%@", urlTemp.stringValue]];

        NSLog(@"Icon Found %@",urlTemp.stringValue);

   break;
    }

Либо заранее выделите / инициализируйте arryTableAllIcons, либо убедитесь, что оно не равно nil

    for(CXMLElement *urlTemp in iconTempArray) 
    {
        if (!arryTableAllIcons)
            arryTableAllIcons = [[NSMutableArray alloc] init];
        [arryTableAllIcons addObject:[NSString stringWithFormat:@"%@", urlTemp.stringValue]];

        NSLog(@"Icon Found %@",urlTemp.stringValue);

   break;
    }

Также этот оператор break завершитсяцикл for на первом проходе, так что я думаю, что его там не должно быть

    for(CXMLElement *urlTemp in iconTempArray) 
    {
        if (!arryTableAllIcons)
            arryTableAllIcons = [[NSMutableArray alloc] init];
        [arryTableAllIcons addObject:[NSString stringWithFormat:@"%@", urlTemp.stringValue]];

        NSLog(@"Icon Found %@",urlTemp.stringValue);
    }
2 голосов
/ 07 ноября 2011

Я думаю, проблема в том, что вы объявляете массив внутри цикла «For». Таким образом, вы создаете его каждый раз, когда цикл повторяется

1 голос
/ 07 ноября 2011

В этой части кода:

for(CXMLElement *urlTemp in iconTempArray) 
{
    arryTableAllIcons = [[NSMutableArray alloc] init];
    [arryTableAllIcons addObject:[NSString stringWithFormat:@"%@", urlTemp.stringValue]];
    NSLog(@"Icon Found %@",urlTemp.stringValue);
    break;
}

Вы повторно init создаете новый arryTableAllIcons на каждом шаге цикла for.

Помимо создания утечки памяти, вы создаете много новых массивов. Последний экземпляр - тот, который имеет последний элемент.

Переместите оператор alloc-init за пределы цикла (возможно, полностью за пределы метода и переместитесь в класс init) и убедитесь, что вы release его в какой-то момент после использования.

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