2

我有一个应用程序,我在其中加载图像UITableView。每行都有一个图像视图。

  1. 我从 URL 下载图像并将其分配给UIImageView. 这里的问题是,如果我拖动表格视图,图像视图不会更新。它仅在我松开手指时更新。

  2. 另一个问题是我在所有单元格中都有一个标签,显示一个使用计时器递增的计数器。当我的手指在表格视图上时,也不会调用计时器操作。

在这两种情况下如何进行更新?

可能这是一个非常基本的问题。但我不知道。

感谢大家!

编辑:我注意到-connection:didReceiveResponse:在触摸视图时没有调用方法。

编辑 2:我尝试使用 NSURLConnection 添加运行循环。我的方法看起来像这样。

- (void)start {

    NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:self.imageURL cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:self.timeoutInterval];
    [request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];  
    _connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];

    NSPort* port = [NSPort port];
    NSRunLoop* rl = [NSRunLoop currentRunLoop]; // Get the runloop
    [rl addPort:port forMode:NSRunLoopCommonModes];
    [_connection scheduleInRunLoop:rl forMode:NSRunLoopCommonModes];
    [_connection start];
    [rl run];
}

即使我触摸视图,这也会加载图像。但是表格视图滚动得很慢。它甚至没有滚动。它只在我拖动时移动。松开手指后没有任何动作。

4

3 回答 3

2

问题 1

解决方案是使用在拖动表格视图时不会被阻止的下载机制。SDWebImage是一个异步图像下载器,具有 UIImageView 类别的缓存支持。即使您正在拖动表格,这也会让您的图像视图得到更新。我在使用 SDWebImage 的项目中遇到了同样的问题。只需像这样的电话就可以了。

 [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                   placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

问题 2

如果在主线程跟踪触摸时它的 scheduleTimer 不会被调用。做这样的事情。只需创建一个计时器并添加到循环

NSTimer* timer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateLabel:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

这不会打断你的计时器。

于 2013-05-21T05:29:42.823 回答
0

我使用NSRunLoop使用@Amar@Meera J Pai给出的答案解决了NSConnectionNSTimer的问题。

我已将连接代码更改为这样。

_connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]
[_connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];    
[_connection start];

效果很好!

感谢大家。

于 2013-05-23T07:04:26.093 回答
0

这可能对您有所帮助,因为您下载要在UItableViewCells 此处显示的图像,我正在给您提供背景中任何内容的示例,如果没有blocking UI那里,您可以获得很好的教程链接。他们已经提到了足够好的方法同样的事情。通过这个链接

其余的事情可以Meera j Pai在他的回答中提到的帮助下解决。

于 2013-05-21T07:35:43.010 回答