从Internet CollectionView获取图像

时间:2013-07-05 21:35:56

标签: ios xcode multithreading collectionview

这是我的第一个问题,请原谅我是新手。

我正在使用CollectionView来显示从互联网下载的图像。当我尝试异步执行时会出现问题。

@interface myViewController
{
    NSArray *ArrayOfSections
}
@end

-(void)viewDidLoad{
    [self performSelectorInBackground:@selector(refreshImages) withObject:nil];
}

-(void)refreshImages{
    ... //Get information from the net


    NSArray internetInfo = ...;

    [self performSelectorOnMainThread:@selector(refreshCollectionView:) withObject:internetInfo waitUntilDone:NO];
}

-(void)refreshCollectionView:(NSArray tempArray){

    ArrayOfSections = tempArray;

}

此代码无效。它显示了一个空的CollectionView,虽然我已经仔细检查了存储在ArrayOfSections上的信息是否正确。

此外,如果我同步执行(我只更改viewDidLoad)。

-(void)viewDidLoad{
    [self refreshImage];
}

一切正常。我要去香蕉。请帮忙

1 个答案:

答案 0 :(得分:0)

我认为这是因为你没有告诉集合视图重新加载。您的刷新方法更新模型但不更新视图。

如果你在后台线程上获取数据,主线程可以继续它的生命周期,这包括查询集合视图数据源和委托方法然后更新视图,但是在你的情况下它会很快这样做,因为模型尚未准备好。这就是为什么你需要告诉它在模型准备就绪时,在数据获取结束时再次这样做。由于您在同步执行时阻塞了线程,因此在模型准备就绪之前它不会到达集合视图方法,这就是它以这种方式工作的原因。