首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSMutableArray没有添加所有项目,只添加了最后一项- Iphone / IOS / xcode

NSMutableArray没有添加所有项目,只添加了最后一项- Iphone / IOS / xcode
EN

Stack Overflow用户
提问于 2011-11-07 18:43:04
回答 3查看 491关注 0票数 0

我使用以下代码将图标从XML文件加载到NSMutableArray中:

代码语言:javascript
复制
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中)

代码语言:javascript
复制
cell.textLabel.text = [arryTableAllIcons objectAtIndex:indexPath.row];

计数似乎起作用了,因为我有正确的单元格数量,但表格中的空单元格和1与最后一个图标找到的文本

代码语言:javascript
复制
The count is just:  `return [arryTableAllIcons count];`

我的NSLog返回了正确的文本

代码语言:javascript
复制
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

所以我一定是把数组加错了!

任何帮助都将不胜感激

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-07 18:45:12

我认为问题在于你在"For“循环中声明了数组。通过这种方式,您可以在每次循环重复时实例化它

票数 2
EN

Stack Overflow用户

发布于 2011-11-07 18:46:24

您不断创建新的、空的NSMutableArrays

代码语言:javascript
复制
    for(CXMLElement *urlTemp in iconTempArray) 
    {
        arryTableAllIcons = [[NSMutableArray alloc] init];
        [arryTableAllIcons addObject:[NSString stringWithFormat:@"%@", urlTemp.stringValue]];

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

   break;
    }

预先分配/初始化arryTableAllIcons,或者检查它是否为空

代码语言:javascript
复制
    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循环,因此我认为它不应该在那里

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

        NSLog(@"Icon Found %@",urlTemp.stringValue);
    }
票数 3
EN

Stack Overflow用户

发布于 2011-11-07 18:50:30

在这部分代码中:

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

for循环中的每一步,您都在重新init-ing一个新的arryTableAllIcons

除了造成内存泄漏之外,您还创建了许多新的数组。最后一个实例化是具有最后一项的实例化。

将alloc init语句移到循环之外(可能完全在方法之外,并移到类init中),并确保在使用它之后的某个时刻对其执行release操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8035320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档