【问题标题】:Get images from internet CollectionView从 Internet CollectionView 获取图像
【发布时间】:2013-07-05 21:35:55
【问题描述】:

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

我正在使用一个显示从 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];
}

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

【问题讨论】:

    标签: ios xcode multithreading collectionview


    【解决方案1】:

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

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

    【讨论】:

    • 是的!非常感谢!我虽然这是一个线程问题,并试图重新加载collectionView,但不是数据。关键是[self.collection reloadData];
    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 2021-01-10
    • 2019-04-22
    • 1970-01-01
    • 2013-03-31
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多