NSMutableArray不添加所有项目,只是最后一项 - Iphone / IOS / xcode

时间:2011-11-07 10:43:04

标签: iphone objective-c ios nsmutablearray

我正在使用以下内容将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];

计数似乎有效,因为我有正确数量的单元格,但表格中的空单元格和最后一个图标中的空白单元格

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 个答案:

答案 0 :(得分:3)

您不断创建新的空NSMutableArrays

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

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

   break;
    }

预先分配/ init 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);
    }

答案 1 :(得分:2)

我认为问题在于你在#34; For"中声明了数组。环。通过这种方式,每次循环重复时都会对其进行实例化

答案 2 :(得分:1)

在这段代码中:

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