-1

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

我正在使用一个显示从 Internet 下载的图像的 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];
}

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

4

1 回答 1

0

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

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

于 2013-07-05T21:59:02.807 回答