0

我的问题是我无法在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {} 中访问我的 NSMutableArray。

我在这里创建我的 NSMutableArray:

nodes = [xmlDoc nodesForXPath:@"/xml/items/item/short_desc" error:nil];

if (nodes != nil && [nodes count] >= 1) {
    for (int i = 0; i < [nodes count]; i++) {
        CXMLElement *resultElement = [nodes objectAtIndex:i];
        result = [[[[resultElement attributeForName:@"data"] stringValue] copy] autorelease];       
        [short_desc addObject:result];
    }
}

我可以在任何地方打印出 short_desc 的内容:

NSLog([short_desc objectAtIndex:0]);

但不在(如果我这样做,我的应用程序崩溃):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

.....

NSString *date = [name objectAtIndex:0];


labelDate.text = date;
.....   

return cell;}

如果我使用:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

.....

NSString *date = @"text...";


labelDate.text = date;
.....   

return cell;}

它工作正常。

这个问题的任何解决方案???

4

2 回答 2

3

你没有展示你是如何创建数组的,但最可能的原因是你没有保留你的数组,并且在你遇到崩溃的方法之前它被释放了。你是如何创建名称数组的?.. 是的,你看到你正在创建这样的数组 62. name = [NSMutableArray arrayWithCapacity:10]; 您需要保留数组,否则操作系统将释放内存,您将无法访问它......相反,您可以这样做

name =[ [NSMutableArray arrayWithCapacity:10] retain];

我下面的海报发布了一篇关于内存管理的文章,你应该看一下……无论如何,这里有一个链接内存管理指南

于 2010-06-02T18:38:29.683 回答
0

如果您使用方法名称中带有“alloc”、“new”或“copy”字样的方法创建数组 - 您不需要保留数组。在其他情况下,创建的数组是授权数组。如果你想存储它 - 你应该通过发送retain方法(例如[names retain])增加保留计数器。并且不要忘记在使用完它时释放它(例如在dealloc方法中)。

请阅读内存管理指南

于 2010-06-02T20:19:57.387 回答