2016-06-21 41 views
-2

我想从我的委托方法“applicationDidEnterForeground”刷新我的CollectionView reloadData,但我得到一个错误“UICollectionView如何从委托

在我CollectionViewController” UICollectionView必须以非空布局参数进行初始化”我有这样的方法

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

,这里是我的的appDelegate

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

    [collectionViews reloadThisData]; 
} 

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

+0

你能提供代码吗? –

+0

谢谢你的回复,请再看看我的问题。 –

回答

0

要解决您需要使用流布局初始化CollectionViewController的错误。

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

我会建议不同的方法来这样做,虽然,在你的应用程序代理,你将创建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]; 
}