首页 文章

UICollectionView如何从委托重新加载数据

提问于
浏览
-2

我试图从我的委托方法“applicationDidEnterForeground”重新加载我的collectionView但我得到一个错误“”UICollectionView必须用非零布局参数初始化“

在我 CollectionViewController 我有这个方法

-(void)reloadThisData
{
    [self.collectionView reloadData];
}

这是我在 appDelegate 的代码

- (void)applicationWillEnterForeground:(UIApplication *)application {
    CollectionViewController *collectionViews = [[CollectionViewController alloc]init];

    [collectionViews reloadThisData];
}

我知道它只会创建另一个collectionView,这就是为什么它只返回一个空值 . 还有其他方法可以将我的uiviewcollection从背景重新加载到前台吗?

1 回答

  • 0

    要修复您获得的错误,您需要使用流布局初始化CollectionViewController .

    UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc] init];
    CollectionViewController * collectionViews = [[CollectionViewController alloc] initWithCollectionViewLayout:flowLayout];
    [collectionViews reloadThisData];
    

    I would recommend a different approach to doing this though ,就像在您的应用委托中一样,您将创建一个新的CollectionViewController实例,而不是针对显示的实例 . 您应该在CollectionViewController的viewWillAppear方法中订阅"UIApplicationDidBecomeActiveNotification"通知 .

    -(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];
    }
    

相关问题