在uitableview中滚动中断

时间:2013-03-27 23:50:39

标签: ios xcode uitableview

当我从服务器获取单元格的数据时,我在查看我的tableview时遇到问题。如果我不使用照片,滚动没有中断,但我也想使用图像。谁能知道我怎么解决这个问题?我从服务器中的plist获取数据。

以下是使滚动中断的图像代码(我正在使用自定义样式单元格)

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


{

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];




    if (cell == nil) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    }


    NSURL *URL = [[NSURL alloc] initWithString:[[self.content objectAtIndex:indexPath.row] valueForKey:@"imageName"]];

    NSData *URLData = [[NSData alloc] initWithContentsOfURL:URL];



    UIImage *img = [[UIImage alloc] initWithData:URLData];

    UIImageView *imgView = (UIImageView *)[cell viewWithTag:100];

    imgView.image = img;

....

1 个答案:

答案 0 :(得分:2)

如果你的意思是滚动停止和开始,这可能是因为如果从服务器加载图像(这可能需要花费相当多的时间),在主线程上执行会导致冻结。

如果是这种情况,修复方法是在另一个线程中获取图像。幸运的是,iOS有一个相当容易使用的多线程系统,叫做Grand Central Dispatch。

以下是一些示例代码:

    dispatch_queue_t q = dispatch_queue_create("FetchImage", NULL);
    dispatch_async(q, ^{
        /* Fetch the image from the server... */
        dispatch_async(dispatch_get_main_queue(), ^{
            /* This is the main thread again, where we set the tableView's image to
               be what we just fetched. */
        });
    });