我正在使用以下内容将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
所以我必须将数组添加错误!
任何帮助都将非常感激
答案 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