我正在尝试从我的委托方法“applicationDidEnterForeground”重新加载我的collectionView但是我收到错误“”UICollectionView必须用非零布局参数初始化“
在我的 CollectionViewController 中我有这个方法
-(void)reloadThisData
{
[self.collectionView reloadData];
}
这是我在 appDelegate
中的代码- (void)applicationWillEnterForeground:(UIApplication *)application {
CollectionViewController *collectionViews = [[CollectionViewController alloc]init];
[collectionViews reloadThisData];
}
我知道它只会创建另一个collectionView,这就是为什么它只返回一个空值。还有其他方法可以将我的uiviewcollection从后台重新加载到前台吗?
答案 0 :(得分:0)
要解决您需要使用流布局初始化CollectionViewController所需的错误。
UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc] init];
CollectionViewController * collectionViews = [[CollectionViewController alloc] initWithCollectionViewLayout:flowLayout];
[collectionViews reloadThisData];
我建议使用不同的方法来执行此操作,因为在您的应用委托中,您将创建一个新的CollectionViewController实例,而不是针对显示的实例。 您应该订阅" UIApplicationDidBecomeActiveNotification"在CollectionViewController中的viewWillAppear方法中的通知。
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadThisData) name:UIApplicationDidBecomeActiveNotification object:nil];
}
不要忘记删除观察者,以免重新加载方法进行重复调用。
-(void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
}