帮助NSNotification和异步下载

时间:2010-12-27 17:09:05

标签: iphone objective-c cocoa-touch nsxmlparser nsnotificationcenter

我正在从一个视图向另一个视图发送通知。我的问题是我在cellForRowAtIndexPath方法中调用的视图中的通知仅在tableview滚动时发送。如何停止此操作并在图像下载后发送通知?这是我的代码:https://gist.github.com/756302

谢谢

用mkdev

2 个答案:

答案 0 :(得分:0)

您的代码应该正常,当connectionDidFinishLoading,您致电NSNotificationCenter发送通知时,cellForRowAtIndexPath

中没有发布方法

答案 1 :(得分:0)

据我了解您的代码,该消息将触发整个表的重新加载。这应该会导致细胞更新。

因此,您需要检查第76行,是否正在绘制单元格,因为从完成消息触发了重新加载(并且图像现在可以显示)或者您需要启动异步下载图像。

我想到的第一件事就是在reloadTableView中设置一个属性:

- (void)reloadTableView
{
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"aaa"];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"name" object:nil];
    NSLog(@"removeobserver");
    loadImageFinished = YES;
    // if your table has several sections you'll need to adopt the section number 
    NSIndexSet *indices = [[NSIndexSet alloc] initWithIndex:0];
    [self.tableView reloadSections:indices withRowAnimation:UITableViewRowAnimationFade];
    [indices release];
}

然后添加

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
   ...
   if (loadImageFinished) {
      ... 
   } else {
      [asyncImage loadImageFromURL:[NSURL URLWithString:pathImage]];
   }
   ...
}

请注意,重新加载表可能还有其他原因 - 视图可能已经消失或卸载,您可能不希望多次触发异步加载。