我已经在这几天工作了(关闭和开启)并且我不是确切地确定为什么这不起作用,所以我问你的专业人士SOF有一些见解。
在我的第一个视图控制器上,我正在阅读包含10个以上项目的JSON Feed。每个项目都由NewsItem
视图表示,该视图允许标题,正文和小图像。 UIImageView
有IBOutlet
名为 imageView 。我正在异步加载 imageView 的图像。加载图像后,我将发送名为 IMAGE_LOADED 的通知。此通知仅在 NewsItemArticle
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
//this will start the image loading in bg
dispatch_async(concurrentQueue, ^{
NSData *image = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:self.imageURL]];
//this will set the image when loading is finished
dispatch_async(dispatch_get_main_queue(), ^{
[self.imageView setAlpha:0.0];
self.image = [UIImage imageWithData:image];
[self.imageView setImage:self.image];
[UIView animateWithDuration:0.5 animations:^{
[self.imageView setAlpha:1.0];
}];
if(self)
[[NSNotificationCenter defaultCenter] postNotificationName:IMAGE_LOADED object:self];
});
});
当用户点击 NewsItemView 时,我会加载一个新的控制器,它是滚动视图中几个 NewsItemArticle 视图的滚动视图。 NewsItemArticle 会监听 IMAGE_LOADED ,如果确定当前通知有此特定文章的图片,则会使用相同的图片作为自己的参考,如下所示:< / p>
- (void)handleImageLoaded:(NSNotification *)note
{
if([note.object isEqual:self.cell]) {
// this next line is hanging the app. not sure why.
[self.imageView setImage:self.cell.image];
[self.activityViewIndicator removeFromSuperview];
}
}
基本上是这样的:
UIImageView
如果我注释掉可疑行,该应用永远不会挂起。就这样,我的应用程序挂起,直到所有图像都加载完毕。我的想法是:
以前有人见过这样的事吗?