表视图滚动导致使用动态数据时出现问题

时间:2011-02-24 09:43:52

标签: iphone objective-c memory-management uitableview

当我使用静态数据时没有问题但我使用动态数据与Web服务有问题(表视图滚动导致崩溃程序)为什么?如果我评论这些行添加静态数据它的工作原理;

//tempCs is NSDictionary
tempDc = [arrHaberler objectAtIndex:indexPath.row];
cell.textLabel.text = [tempDc valueForKey:@"short_header"];

NSData *imgData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[tempDc valueForKey:@"iphone_src"]]];
UIImage *myImage = [[[UIImage alloc] initWithData:imgData] autorelease];
cell.imageView.image = myImage;

4 个答案:

答案 0 :(得分:1)

我试着做了一些评论另外一行,问题出在这一行:

tempDc = [arrHaberler objectAtIndex:indexPath.row];

我将“indexPath.row”更改为“0”仍导致崩溃...有关何时将数据分配给NSDictionary的问题

答案 1 :(得分:1)

您没有发布imgData。你想在创建UIImage之后这样做。

除此之外,根据您的描述,numberOfRowsInSection方法可能有错误吗?


编辑(讨论后):

(由于无法识别的选择器(即来自NSArray的方法)发送到NSString实例而崩溃)

有许多方法可以达到这种状态,包括访问一些已发布和重用的内存(即缺少一个retain),或者由于某些解析导致错误的结果而覆盖带有字符串的数组。

答案 2 :(得分:0)

没有空检查(设置NSData *imgData并设置UIImage *myImage)并且在同步调用服务器中。 fmpov,问题在那里。

答案 3 :(得分:0)

@VNevzatR我只是问你,你是不是从某个地方调用了大量的图片......因为你说UITableView并不是问题,因为你说静态数据工作正常,问题是一些在哪里,所以如果你一次调用大量的图像....尝试这样做...释放该池。

-(void) parseImages
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    //Fetch your images here

    [self performSelectorOnMainThread:@selector(Done) withObject:nil waitUntilDone:YES];
    [pool release];
}

-(void) Done {
    [self.tableView reloadData];
}

希望它能解决你的问题......祝你好运